知识养成了思想,思想同时又在融化知识。这篇文章主要讲述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);
}
这样就会解决手机设置与用户授权不一致的问题。
【Android开发 - 更" 聪明" 的申请权限方式】本文原始地址,如有更多疑问,请参考我的其它Android相关博客:我的博客地址
推荐阅读
- Android手机上,利用bat脚本模拟用户操作
- Vue2.5 实战微信读书 媲美原生App的企业级web书城
- source ~/.bashrcvirtualenvwrapper 出错
- Android开发 - 获取系统输入法高度的正确姿势
- Android开发 - 获取Android设备的唯一标识码(Android 6.0或更高)
- 通用Mapper,出现sql关键字冲突
- A New Approach to Line Simplification Based on Image Processing: A Case Study of Water Area Boundari
- .Net Core 2.*+ InfluxDB+Grafana+App Metrics实时性能监控
- Unity界面结构介绍详细解释(图解)