描述
有个需求是需要第三方应用通过TelephonyManager去获取到IMEI,之前获取时发现报以下异常
04-23 13:41:41.005 10800 10800 E AndroidRuntime: Caused by: java.lang.SecurityException: getImeiForSlot: The user 10131 does not meet the requirements to access device identifiers.
通过源码发现需要以下系统权限
android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
查看frameworks/base/core/res目录下的AndroidManifest.xml文件
<permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
android:protectionLevel="signature|privileged" />
表示这个权限保护级别为signature(platform签名)或者privileged(priv-app)
三方应用
特权处理
三方应用是拥有应用本身自带的签名的,此时需要将此apk集成到priv-app下才能使用这个系统权限。
配置xml
集成后还需要配置xml文件,一般命名为以包名为区分,此处命名为com.example.test.xml,里面的详细信息如下所示,此文件需要集成到/system/etc/permissions方可起作用
<permissions>
<privapp-permissions package="com.example.test">
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
</privapp-permissions>
</permissions>
系统应用
只需要通过platform签的应用是可正常访问此系统权限