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

栏目: IOS · Android · 发布时间: 7年前

内容简介:在Android6.0以后,很多权限需要动态申请,只有在用户点同意后,我们才能使用对应API,因此,正确申请权限就显得很重要。通常我们使用这种方式来判断权限状态:但是用这种方式我们会碰到一个比较棘手的情况,当用户同意了某个权限后,然后用户又在手机的系统设置的应用权限中关闭了这个权限,此时我们并不能正确获取到正确的权限状态。

在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开发 - 更"聪明"的申请权限方式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Series 60 应用程序开发

Series 60 应用程序开发

巴克 / 人民邮电出版社 / 2005-7 / 75.0

Series 60智能手机开发平台正掀起新一轮的移动服务浪潮。超过60%的手机生产商获得了Series 60平台的授权。Series 60移动应用开发平台拥有最大的用户群,从而成为智能手机市场的代表。诺基亚与EMCC软件公司合作,为C++程序员和软件设计师编撰了这本Series 60开发的权威指南。本书由诺基亚资深专家进行了全面审阅。本书内容涉及了开发过程的各个阶段,从设计、编程、测试、调试到部署......一起来看看 《Series 60 应用程序开发》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码