您的位置:首页 > 移动开发 > Android开发

Android 6.0 以下系统的权限检测

2016-04-05 19:04 302 查看

系统安全软件与自定制ROM对权限的相关问题

问题:系统安全软件在何时检测是否授权?

答案:当应用调用需要权限的功能的时候,安全软件检测授权。

问题:在Android 6.0 中,可以对权限进行检测,但在低于 Android 6.0的系统中,检查函数的返回值,可能都是已授权(在Manifest文件中已经申明权限)但系统的安全软件却能拒绝掉这个权限,这时候该如何处理?

答案:在低于Android 6.0 的系统中,权限检测函数对于已经在Manifest中声明的权限,返回的确实是已授权,但在继续运行调用功能的时候,安全软件却能拒绝该权限。

问题:系统安全软件同意授权或者拒绝授权,会给应用返回一个什么样的值?

答案:各种安全软件各不相同,没有给定接口,也没有函数可以调用,独立的软件数据也不能被访问,所以无法找到同意或者拒绝的返回值。包括各国产产商的定制ROM其中内嵌的权限管理功能。

问题:系统安全软件是如何在应用已经有权限的前提下,拒绝应用的行为的?

答案:系统安全软件一般都是通过拦截native方法来实现控制的。所以可能在Android API中检查应用所有的权限根本没有意义。

根据主流app在这方面处理的情况的推断

微信在处理相机权限过程中,当调用系统相机的时候,被安全软件拒绝时,同样没有反应,但当扫描二维码的时候,使用的是自定义的相机界面,当安全软件拒绝时,弹出了对话框。

推断:微信也是同样采用try catch 捕获异常的。经过测试研究,调用系统相机的时候被安全软件拒绝不会出现异常,但自定义的相机则会。

微信在处理语音设备的过程中,当录音请求被安全软件拒绝,会出现录音时间太短的错误提示。

推断:微信在录音处理的过程中,使用的是返回值异常来判断。

总结与解决办法

总结:被安全软件或者定制的ROM的权限管理功能管理的权限,可能并不能拿到与用户交互的结果,因为这些软件是通过拦截native方法来实现拒绝应用功能的,并没有改变权限,而这些不同的软件或ROM,在底层拦截的方法各不相同,所以并不能很好的处理。

根据对主流软件的观察与测试,可能通过try catch到异常,或者通过返回值的异常来判定是没有办法的办法了。

经过测试几个可能用到的权限,结果如下:

RECORD_AUDIO:系统在调用需要这个权限的功能的时候,如果被安全软件拒绝,会抛出异常,可以在catch中处理没有权限的情况(MOTO XT1085 系统自带安全软件下测试)。主流软件中,微信通过返回值异常交互,高德,QQ通过catch异常。

CAMERA:调用系统摄像头的时候不会抛出异常(微信,QQ发送照片均无反馈),调用自定义的camera会抛出异常(微信二维码扫描)

LOCATION:对于需要这个权限的应用,可能没有比较好的方法处理,因为高德地图中定位权限被拒绝,同样没有交互。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息