Android关于获取用户是否允许某项权限

Android6.0以上检查权限方式

if(android.os.Build.VERSION.SDK_INT >= 23) {
			if(context.getApplicationContext().checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)==PackageManager.PERMISSION_GRANTED &&context.getApplicationContext().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)==PackageManager.PERMISSION_GRANTED  ){
				isHave=true;
			}else{
				isHave=false;
			}
			
//			for(String permission:permissions){
//				isHave=(PackageManager.PERMISSION_GRANTED == context.getApplicationContext().checkSelfPermission(permission));
//				if(isHave==false){
//					break;
//				}
//			}
		}

坑点:有时候发现不管怎么检测,不管用户是允许还是拒绝,检查的结果始终是允许

解决方法:检查你的工程的编译版本:<uses-sdk android:targetSdkVersion="23"/>,是否是23及以上,如果编译版本小于23或者不写,使用以上检查方法永远都是用户允许



Android 6.0一下检查用户是否允许某项权限

/**
	 * 检查权限列表
	 * @param op
	 * 这个值被hide了,去AppOpsManager类源码找,如位置权限  AppOpsManager.OP_GPS==2
	 * 0是网络定位权限,1是gps定位权限,2是所有定位权限
	 * 返回值:0代表有权限,1代表拒绝权限 ,3代表询问是否有 ,-1代表出错
	 */
	public static int checkOp(Context context, int op) {
		final int version = Build.VERSION.SDK_INT;
		if (version >= 19) {
			Object object = context.getSystemService("appops");
			Class c = object.getClass();
	      	try {
		         Class[] cArg = new Class[3];
		         cArg[0] = int.class;
		         cArg[1] = int.class;
		         cArg[2] = String.class;
		         Method lMethod = c.getDeclaredMethod("checkOp", cArg);
		         return (Integer) lMethod.invoke(object, op, Binder.getCallingUid(), context.getPackageName());
	      	} catch (Exception e) {
	      		e.printStackTrace();
	      	}
		}
		return -1;
	}

跟系统厂商有关:亲测小米可以判断


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值