Letv+Android 6.0+Exception: Neither user 10120 nor current process has android.permission.READ_PHONE_STATE

场景:

线上日志出现crash信息,仅涉及单台设备Letv+Android 6.0

出错日志信息为

Fatal Exception: java.lang.SecurityException: getImei: Neither user 10120 nor current process has android.permission.READ_PHONE_STATE.
       at android.os.Parcel.readException(Parcel.java:1620)
       at android.os.Parcel.readException(Parcel.java:1573)

RD排查问题,了解情况,学习

排查相关:

1. 根据报错日志,明确和权限相关,堆栈日志定位到代码中调用 getImei

     自android 6.0(sdk 23)起, 运行时权限变更,详见:Android 6.0变更

  简单来说可以理解为有2个变化:

  1.权限申请时机从安装时变为运行时;

  2.权限申请由原来捆绑式一站式处理,变成可支持单个权限的控制

 READ_PHONE_STATE属于危险权限,危险权限涵盖应用需要涉及用户隐私信息的数据或资源,或者可能对用户存储的数据或其他应用的操作产生影响的区域。例如,能够读取用户的联系人属于危险权限。如果应用声明其需要危险权限,则用户必须明确向应用授予该权限。

参考:http://www.jianshu.com/p/a37f4827079a

https://developer.android.com/guide/topics/security/permissions.html?hl=zh-cn#normal-dangerous

但是,应用内设置如下:

minSdkVersion=14
targetSdkVersion=18

targetSdkVersion < 23, 在Android 6.0 +系统上应启用兼容性行为,不启用新特性,仍在安装时统一申请权限。

2. 仅涉及单台设备,其他机型6.0+系统未出现

Android 6.0 提供了管理界面让用户可取消某项特殊权限(参考:聊一聊Android6.0运行时权限

 不同的手机厂商都在原生Android系统上做了一层封装,兼容性行为的实际处理各有区别,这也是各种兼容性问题出现的原因。(参考:what is a custom rom

参考:Android动态权限相关

 

处理:加固代码,try-catch

posted @ 2017-09-19 21:57  QA小虾  阅读(909)  评论(0编辑  收藏  举报