Android XXPermissions 一行代码搞定动态权限获取

先附上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 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 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 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 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);

就这么简单,有问题希望大家指出,有意见希望大家指导,谢谢!如需转载、抄写,请注明出处哦,谢谢咯!

 

你可能感兴趣的:(Android,权限,XXPermissions,动态获取权限)