先附上XXPermissions框架地址:https://github.com/getActivity/XXPermissions
XXPermissions框架确实使用简单快捷,我在XXPermissions框架便捷的基础上,又简单封装了下,适合多数app在初始化时就询问所有危险权限。调用时机即初始化时,尚未调用需要危险权限的方法时,具体方法如下:
public class NBPermission {
private static Activity sContext;
private static final String TAG = "NBSDKPermission";
private static boolean isOpenTs = false;//我自己调试用的玩意
/**
* 获取权限
* @param context
* @param isAsk 是否开启获取权限功能
* @param permissions
*/
public static void getPermission(Context context,boolean isAsk,String... permissions){
sContext = (Activity)context;
if(!isAsk)return;
try {
if (XXPermissions.isHasPermission(context, permissions))
{
NBUtils.log(TAG, "已经获得所需所有权限");
if (isOpenTs) {
Toast.makeText(sContext, "已经获得所需所有权限", Toast.LENGTH_SHORT).show();
}
}else {
XXPermissions.with((Activity)context).permission(permissions).request(new OnPermission() {
@Override
public void noPermission(List<String> denied, boolean quick) {
if (quick) {
NBUtils.log(TAG, "被永久拒绝授权");
if (isOpenTs) {
Toast.makeText(sContext, "被永久拒绝授权", Toast.LENGTH_SHORT).show();
}
}else {
NBUtils.log(TAG, "获取权限失败");
if (isOpenTs) {
Toast.makeText(sContext, "获取权限失败", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void hasPermission(List<String> granted, boolean isAll) {
if (isAll) {
NBUtils.log(TAG, "获取权限成功");
if (isOpenTs) {
Toast.makeText(sContext, "获取权限成功", Toast.LENGTH_SHORT).show();
}
}else {
NBUtils.log(TAG, "部分权限未正常授予");
if (isOpenTs) {
Toast.makeText(sContext, "部分权限未正常授予", Toast.LENGTH_SHORT).show();
}
}
}
});
}
} catch (Exception e) {
NBUtils.log(TAG, "获取权限时发生了错误,请检查清单是否配置权限,或者其他:"+e.toString());
if (isOpenTs) {
Toast.makeText(sContext, "获取权限时发生了错误,请检查清单是否配置权限,或者其他:"+e.toString(), Toast.LENGTH_SHORT).show();
}
}
}
/**
* 获取权限
* @param context
* @param isAsk 是否开启获取权限功能
* @param isOpenGudie 获取权限失败时,是否引导用户去权限界面,手动打开权限
* @param isOpenGudieForce 是否强制引导用户去权限界面授权
* @param title 引导的dialog界面的title.例如:开启权限引导
* @param message 引导的dialog界面中显示的提示内容,例如:被您永久禁用的权限为应用必要权限,是否需要引导您去手动开启权限呢?
* @param okButMessage 确认按钮显示的内容
* @param noButMessage 否定按钮显示的内容
* @param permissions
*/
public static void getPermission(Context context,boolean isAsk,final boolean isOpenGudie,final boolean isOpenGudieForce,final String title,final String message,final String okButMessage,final String noButMessage,String... permissions){
sContext = (Activity)context;
if(!isAsk)return;
try {
if (XXPermissions.isHasPermission(context, permissions))
{
NBUtils.log(TAG, "已经获得所需所有权限");
}else {
XXPermissions.with((Activity)context).permission(permissions).request(new OnPermission() {
@Override
public void noPermission(List<String> denied, boolean quick) {
if (quick) {
NBUtils.log(TAG, "被永久拒绝授权,请手动授予权限");
if (isOpenTs) {
Toast.makeText(sContext, "被永久拒绝授权,请手动授予权限", Toast.LENGTH_SHORT).show();
}
//如果是被永久拒绝就跳转到应用权限系统设置页面
if(isOpenGudie) {
final AlertDialog.Builder normalDialog =
new AlertDialog.Builder(sContext);
if(title != null && !title.equals(""))normalDialog.setTitle(title);
if(message != null && !message.equals(""))normalDialog.setMessage(message);
if(okButMessage != null){
normalDialog.setPositiveButton(okButMessage.equals("")?"好的":okButMessage, new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
XXPermissions.gotoPermissionSettings(sContext);
}
});
}
if(noButMessage != null){
if (!isOpenGudieForce) {
normalDialog.setNegativeButton(noButMessage.equals("")?"下一次":noButMessage, new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
}
});
}
}
normalDialog.show();
}
}else {
NBUtils.log(TAG, "获取权限失败");
if (isOpenTs) {
Toast.makeText(sContext, "获取权限失败", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void hasPermission(List<String> granted, boolean isAll) {
if (isAll) {
NBUtils.log(TAG, "获取权限成功");
if (isOpenTs) {
Toast.makeText(sContext, "获取权限成功", Toast.LENGTH_SHORT).show();
}
}else {
NBUtils.log(TAG, "部分权限未正常授予");
if (isOpenTs) {
Toast.makeText(sContext, "部分权限未正常授予", Toast.LENGTH_SHORT).show();
}
}
}
});
}
} catch (Exception e) {
NBUtils.log(TAG, "获取权限时发生了错误,请检查清单是否配置权限,或者其他:"+e.toString());
if (isOpenTs) {
Toast.makeText(sContext, "获取权限时发生了错误,请检查清单是否配置权限,或者其他:"+e.toString(), Toast.LENGTH_SHORT).show();
}
}
}
}
使用:
//1. 基本场景使用,无特殊需求
//获取权限,不需要强制提示什么时
NBPermission.getPermission(Context context,boolean isAsk,String... permissions)
//示例,需要申请俩权限,就写俩就成:
NBPermission.getPermission(context,true,Permission.READ_PHONE_STATE,Permission.WRITE_EXTERNAL_STORAGE);
//2.这个是需要引导用户去权限界面,给出弹窗提示,手动打开权限时可以使用
NBPermission.getPermission(Context context,boolean isAsk,final boolean isOpenGudie,final boolean isOpenGudieForce,final String title,final String message,final String okButMessage,final String noButMessage,String... permissions)
基本功能:
//是否有此权限
if (XXPermissions.isHasPermission(this, Permission.Group.STORAGE)) {
}
//跳转到设置页面
XXPermissions.gotoPermissionSettings(this);
就这么简单,有问题希望大家指出,有意见希望大家指导,谢谢!如需转载、抄写,请注明出处哦,谢谢咯!