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;//}//}}

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

解决方法:检查你的工程的编译版本:,是否是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;}

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


更多相关文章

  1. Android用户界面设计
  2. android项目案例5- 基于Android studio的android用户登陆
  3. 介绍一下android的各种权限。 代码如下: Html代码 <manifestxmlns
  4. Android 权限管理 — 只防君子不防小人
  5. AndroidMenifest.xml中android:sharedUserId="android.uid.syste
  6. Android用户界面 UI组件--TextView及其子类(一) TextView
  7. Android下uid与多用户释疑

随机推荐

  1. Gradle for Android(安卓)第五篇( 多模块
  2. Android(安卓)之窗口小部件详解--App Wid
  3. Android(安卓)多文件监听的实现
  4. 使用SpannableString设置部分文字大小、
  5. 基础总结篇之九:Intent应用详解
  6. Android(安卓)和Java API的一个坑:Simple
  7. android 数据持久化——I/O操作
  8. Android两个Activity传递数据,onActivityR
  9. Android两个android两个activity之间相互
  10. android 常见的一些异常和错误