关于Android运行时权限的文章已经很多,一般看下官网的Requesting Permissions at Run Time就够了。

本篇主要记下使用过程中遇到的一个问题,项目中使用如下代码对检查权限是否被授予:

public boolean checkSelfPermissions(String... permissions) {    ArrayList lackPermissions = new ArrayList<>();    for (String permission : permissions) {        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {            lackPermissions.add(permission);        }    }    if (!lackPermissions.isEmpty()) {        //requestPermissions(permissionList.toArray(new String[permissionList.size()]));        return false;    }else {        return true;    }}

一直也没出现问题,直至昨天遇到了异常,排查发现位置权限未授予的情况下checkSelfPermissions方法依然返回true,说明ContextCompat.checkSelfPermission没能正常返回。仔细看了下项目发现当前targetSdkVersion 22,又网上确认了下果然这货导致,修改targetSdkVersion >=23即可。

其实仅仅判断权限是否授予,不申请权限的话,也可以通过下面的方式解决:

public boolean selfPermissionGranted(String permission) {    // For Android < Android M, self permissions are always granted.    boolean result = true;    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {        if (targetSdkVersion >= Build.VERSION_CODES.M) {            // targetSdkVersion >= Android M, we can            // use Context#checkSelfPermission            result = ContextCompat.checkSelfPermission(this, permission)                    == PackageManager.PERMISSION_GRANTED;        } else {            // targetSdkVersion < Android M, we have to use PermissionChecker            result = PermissionChecker.checkSelfPermission(this, permission)                    == PermissionChecker.PERMISSION_GRANTED;        }    }    return result;}

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  3. Android(安卓)studio出现Error:Plugin is too old, please updat
  4. Android(安卓)Studio 学习心得之--NDK相关Errors的解决
  5. Error retrieving parent for item: No resource found that mat
  6. Android.mk加入aidl编译
  7. android 生成快捷方式(包括源码)
  8. Android:Unable to determine application id: com.android.tools
  9. 使用ant自动化构建android项目

随机推荐

  1. Intent的Action实现应用程序之间的切换
  2. 8、NFC技术:让Android自动打开网页
  3. android自定义属性
  4. Android(安卓)studio: Gradle sync faile
  5. iphone/android比较学习之──图片、文件
  6. [Android] Android下实现电话号码归属地
  7. ZXing
  8. Android SDK Manager不显示更新问题的解
  9. Android(安卓)让adb以root的身份来运行
  10. 推荐一个Android颜色选择器的库colorpick