android 在 6.0 (android M) 引入动态权限,应用在安装时不会授予危险权限
(危险权限列表),应用在运行的时候动态申请,用户确认后才可以拿到权限。
这一套在targetSdkVersion >= 23 的情况下没有任何问题,23以下呢?应用安装的时候默认授予所有权限,但是不(keng)幸(die) 的是 在运行6.0及以上的手机上用户可以主动关闭权限,而且应用还拿不到任何通知。
华为手机取消时界面如下:
下面总结了下不同版本权限的影响:
targetSdkVersion/手机系统 | 不小于6.0 | 小于 6.0 |
---|---|---|
小于23 | 安装时默认授予权限,用户可以取消权限(取消时手机会弹出提醒"取消可能导致无法运行"),app不能动态申请 | 安装时默认授予权限,且用户不能取消 |
不小于23 | 安装默认不授予权限,需要app动态申请权限, 或者用户主动设置 | 安装时默认授予权限,且用户不能取消 |
现在的问题是targetsdkversion <= 22 该怎么判断有没有权限呢?context.requestPermissions
肯定是不行的,这是23以后提供的方法,还好google在support V4里面提供了解决方案
int permission = PermissionChecker.checkSelfPermission(context,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
permission == PermissionChecker.PERMISSION_GRANTED;
通过PermissionChecker
就可以判断有无权限啦 O(∩_∩)O 。
还有一个问题没解决,应用在使用途中用户取消权限,应用能拿到通知吗?
本人在各种百度各种google后负责任的讲,没有通知!!也没有广播!!!
只能自己在Activity::onrestart
判断有无权限了
附上android M 动态权限官方教程: https://developer.android.com/training/permissions/requesting.html