Android开发 - 更"聪明"的申请权限方式
在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);
}
这样就会解决手机设置与用户授权不一致的问题。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Mac上Charles抓包iOS的https请求
介绍一款抓包工具,一般我在windows下使用Fiddler抓包,Fiddler使用教程这里就不讲了,重点介绍使用mac时的抓包工具----Charles。 进入官网 :Charles官网地址官网下载安装Charles:https://www.charlesproxy.com/download/ 点击DOWNLOAD按钮后,选择版本mac版本 如下图: 下载完成安装即可。 由于Charles是收费软件,推荐小伙伴购买。如果不购买也可以,只是每次使用到30分钟就要重启,而且启动时有30秒加载时间,不过并无大碍,不影响免费使用。 开始抓包 首先查看电脑ip地址: 方法一:终端键入命令ifconfig方法二:如下图 设置手机代理 保证手机和电脑连入同一局域网手机连上电脑,点击“设置->无线局域网->连接的WiFi”,设置手动HTTP代理:服务器为电脑IP地址:我这边是192.168.0.142端口:8888 打开电脑上Charles,可以看到提示,点击allow允许,出现手机的HTTP请求列表。 HTTPS抓包 HTTPS的抓包需要在HTTP抓包基础上再进行设置 设置前抓包HTT...
-
下一篇
swift4.1 系统学习十四 协议
// 协议 /* OC中也有协议,swift中的协议的作用与OC中基本一样,只是在写法上有一点区别。 我们使用 protocol关键字来定义一个协议。在一个协议中只能存放计算式属性以及方法的声明, 而不能对他们进行定义。 */ // 1. 协议的定义 // 定义一个协议 protocol MyProt { /// 声明一个普通的方法 func foo() /// 声明一个可修改存储式实例属性的方法 mutating func doSomething(a: Int) -> Int? /// 声明一个静态方法 static func typeMethod() /// 声明一个初始化器方法 init(a: Int) /// 声明一个下标 subscript(index: Int) -> Int {get set} /// 声明一个计算式属性 var property: Int { get set } /// 声明一个计算式属性,并且是只读的 static var typeP: Double { get } } // 2. 协议的遵循 /* 只有协议是没有意义的,协议是用来遵循的,...
相关文章
文章评论
共有0条评论来说两句吧...