Android关于获取用户是否允许某项权限
16lz
2021-01-23
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;//}//}}
坑点:有时候发现不管怎么检测,不管用户是允许还是拒绝,检查的结果始终是允许
解决方法:检查你的工程的编译版本:
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;}
跟系统厂商有关:亲测小米可以判断
更多相关文章
- Android用户界面设计
- android项目案例5- 基于Android studio的android用户登陆
- 介绍一下android的各种权限。 代码如下: Html代码 <manifestxmlns
- Android 权限管理 — 只防君子不防小人
- AndroidMenifest.xml中android:sharedUserId="android.uid.syste
- Android用户界面 UI组件--TextView及其子类(一) TextView
- Android下uid与多用户释疑