Android在 sdk版本23(>=23)之后开始做了权限动态检查的功能。使许多的程序开始重新做了权限申请部分的内容。

今天这个帖子的起因是一个朋友遇到一个问题:在获取设备ID的时候,程序直接crash了。

提示的错误是:

Caused by: java.lang.SecurityException: getDeviceId: Neither user 10007 nor current process has android.permission.READ_PHONE_STATE.

很明显的是permission的问题。 那么,在添加了permission之后还有这个问题该怎么办呢?

研究了好久没有太明白问题到底出在了哪里,然后看了Android的相关权限文档:

系统权限也被分成normaldangerous两类:

  • Normal类的权限不会直接涉及到用户隐私风险。如果APP在Manifest文件中声明了Normal类的权限,系统会自动授予这些权限。
  • Dangerous类的权限可能会让APP涉及到用户机密的数据。如果APP在Manifest文件中声明了Normal类的权限,系统会自动授予这些权限。如果在Manifest文件中添加了Dangerous类的权限,用户必须明确的授予对应的权限后APP才具有这些权限。
    详情请参考: http://developer.android.com/guide/topics/security/permissions.html#normal-dangerous
权限的申请,网上很多,这里不做描述。

最终的问题归结在了Application类,用户在自定义的applicaion中,调用了需要dangerous权限的接口

此权限因为没有,所以应用被强制退出,那么如何解决呢?添加动态权限申请。

那么问题来了,Application中可以动态申请权限吗? 答案是否定的。

动态申请弹出的是一个系统定义的Dialog,这类Dialog的弹出需要一个载体(父窗口)。

到这里,问题解决了。

总结起来就是:

1 android 版本 >= 23( android 6.0) 在需要使用一些系统API的时候,需要进行权限动态申请。

2 动态权限申请不可以放在Application文件中,要放在某个页面中。


权限申请相关参考文档:http://www.jianshu.com/p/141242fbfcdb



更多相关文章

  1. 如何让android apk 获得系统权限
  2. Flutter之请求权限(适配android)
  3. 【Android】实现动态显示隐藏密码输入框的内容
  4. Android修改system只读权限:remount
  5. Android(安卓)NullPointerException解决方法(空指针异常)
  6. 【Android】TextView动态设置Drawable资源
  7. Android(安卓)EditText的输入监听,输入字符的动态获取
  8. Android安全机制介绍
  9. 浅析Android如何从不同的层次保证安全性

随机推荐

  1. 通过gae访问android官方文档
  2. Android设备屏幕问题
  3. Android Permission denied 错误
  4. android apk签名生成及配置
  5. android 飞行模式分析
  6. android 开发之电子钢琴 源码
  7. Android(安卓)中点击两次返回键才退出
  8. Android(安卓)源码 图形系统概述
  9. Android图文识别
  10. Android开发之数据保存技术(一)