美文网首页Android技术知识Android开发Android开发
Android开发 - 更"聪明"的申请权限

Android开发 - 更"聪明"的申请权限

作者: 罗伊德666 | 来源:发表于2018-10-18 15:24 被阅读82次

在Android6.0以后,很多权限需要动态申请,只有在用户点同意后,我们才能使用对应API,因此,正确申请权限就显得很重要。

常用方式

通常我们使用这种方式来判断权限状态:

private static boolean isGranted(final String permission) {
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M
            || PackageManager.PERMISSION_GRANTED
            == ContextCompat.checkSelfPermission(Utils.getApp(), permission);
}

但是用这种方式我们会碰到一个比较棘手的情况,当用户同意了某个权限后,然后用户又在手机的系统设置的应用权限中关闭了这个权限,此时我们并不能正确获取到正确的权限状态。

解决办法

有可能Android团队意识到了这个问题,所以他们发布了一个新的权限检查类:android.support.v4.content.PermissionChecker;

用这个类进行权限的检查就会正确返回,所以我们把权限校验的方法修改如下:

import android.support.v4.content.PermissionChecker;

private static boolean isGranted(final String permission) {
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M
            || PackageManager.PERMISSION_GRANTED
            == PermissionChecker.checkCallingOrSelfPermission(Utils.getApp(), permission);
}

这样就会解决手机设置与用户授权不一致的问题。

本文原始地址,如有更多疑问,请参考我的其它Android相关博客:我的博客地址

相关文章

网友评论

  • 有点健忘:试了下没发现老的代码有啥问题啊,我先允许权限,然后去设置里把权限关掉,再回到app,它又弹出权限需求了。
    这和手机版本有关吗
    有点健忘:@ExampleCode 去看了下,好像这个是target小于23才有问题的,小于23的默认权限都开了,然后我去设置里把权限关了,app里就挂了。以后还是用PermissionChecker吧,好像能好点
    罗伊德666:@有点健忘 有可能,我测试的是位置权限,机型华为荣耀9,系统8.0,ContextCompat.checkSelfPermission返回不正确,新方法会返回PermissionChecker.PERMISSION_DENIED_APP_OP这个值。

本文标题:Android开发 - 更"聪明"的申请权限

本文链接:https://www.haomeiwen.com/subject/hoqszftx.html