Android關於獲取使用者是否允許某項許可權
阿新 • • 發佈:2019-02-01
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; }
跟系統廠商有關:親測小米可以判斷