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;
}
跟系统厂商有关:亲测小米可以判断