关于安卓权限申请问题

目前我想基本上所有的安卓开发都清楚,android 6.0以上的操作系统新增了权限申请的控制,提高了用户安全度,然而在开发中针对权限申请,我们也有需要注意的一些问题点存在,最近开发中就遇到了。

问题一:
即使应用程序关闭了权限,使用ActivityCompat.checkSelfPermission(context,permission),返回的值一直都是已授权。

原因:
因为项目用的targetSDKVersion是22(为了支持硬件设备),首先程序在安装时会默认同意申请的所有权限,后续在设置中手动关闭后,在程序里面加上权限检测的代码,检测到的结果也是已授权的。

解决方法:
针对targetSDKVersion为22或者系统版本为22以下的,我们可以使用supportV4里面提供的检测权限的方法:PermissionChecker.checkSelfPermission(),从而可以得到准确的权限判断。

问题二:
当程序启动后,再去手动修改程序某些权限的开关,回到程序会出现奔溃现象

原因:
当我们去到设置界面修改程序的权限时,此时程序顶层Activity会调用onSaveInstanceState(Bundle outState)的生命周期函数,对当前的界面的一些数据做缓存。当我们修改权限后再回到程序,此时程序会重启当前的Activity,而在onCreate中检测到有缓存,就会根据缓存的数据帮助我们重新渲染界面,初始化数据等。这个时候我们再去做一些需要提前授权的业务时(比如拍照),可能会出现导致程序奔溃的情况。

解决方法:
1、首先重写onSaveInstanceState方法,不调用其父类方法进行保存数据。
2、在onCreate方法中,先判定传入的bundle值是否为空,如果不为空,可以选择重启我们的应用。

你可能感兴趣的:(关于安卓权限申请问题)