targetSdkVersion < 22 下权限适配

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