最新消息:20210917 已从crifan.com换到crifan.org

【无法解决】安卓10的小米9中获取不到IMSI

安卓 crifan 861浏览 0评论
折腾:
【未解决】安卓10的小米9中中国移动手机号的SIM的MSIN是什么
期间,所以现在不论是adb的命令,还是安卓代码,都获取不到IMSI,现在问题转变成了:
对于安卓10的小米9中,如何才能获取到IMSI
小米9 IMSI 空
小米9 IMSI 获取不到
【报Bug】小米9获取imei为空 – DCloud问答
”Android10自身就没有imei api。改用oaid,仔细看plus.devide的文档
去找找oaid和 plus.device
 adb shell getprop | grep plus
没有plus相关
无法获取设备信息(imei、imsi、uuid) – DCloud问答
”plus. device. getInfo
我之前就还是用的这个,这个可以在其他的手机上获取到,但是在小米MIUI11.0.2的手机获取出来的就是控值了
android10无法获取imei是安卓自身的限制,新版提供了oaid解决方案,看plus.device的文档
关于 Android Q 获取不到 imsi 解决方案_GuangkuoDing的博客-CSDN博客
Android Q 禁止获取 IMEI 和设备序列号;
官方的解决方案是这样:
https://developer.android.com/training/articles/user-data-ids
”在使用 Android 标识符时,请遵循以下最佳做法:
1. 避免使用硬件标识符。在大多数用例中,您可以避免使用硬件标识符,例如 SSAID (Android ID),而不会限制所需的功能。
Android 10(API 级别 29)对不可重置的标识符(包括 IMEI 和序列号)添加了限制。您的应用必须是设备或个人资料所有者应用,具有特殊运营商权限或具有 READ_PRIVILEGED_PHONE_STATE 特许权限,才能访问这些标识符。“
那去试试加上特殊权限:READ_PRIVILEGED_PHONE_STATE
看看能否获取到
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
结果还有警告
说是:
Permission is only granted to system apps
不管,继续试试
以及也加上判断代码:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PRIVILEGED_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
    return;
}
去调试
结果编译报错:
Cannot resolve symbol ‘READ_PRIVILEGED_PHONE_STATE'

rcsjta/core/src/com/gsma/rcs/provisioning/local/Provisioning.java:127: 错误: 找不到符号
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PRIVILEGED_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                                                                        ^
  符号:   变量 READ_PRIVILEGED_PHONE_STATE
  位置: 类 permission
搜:
Cannot resolve symbol ‘READ_PRIVILEGED_PHONE_STATE’
android – READ_PRIVILEGED_PHONE_STATE permission not granted – Stack Overflow
android – Cannot Resolve Symbol Manifest.permission.READ_PHONE_STATE – Stack Overflow
android – Cannot resolve symbol ‘ACCESS_BACKGROUND_LOCATION’ – Stack Overflow
设备标识符  |  Android 开源项目  |  Android Open Source Project
”设备标识符
Android 10 更改了设备标识符的权限,让所有设备标识符现在都受到 READ_PRIVILEGED_PHONE_STATE 权限的保护。在 Android 10 之前的版本中,永久性设备标识符(IMEI/MEID、IMSI、SIM 和 build 序列号)受到 READ_PHONE_STATE 运行时权限的保护。系统仅会向使用平台密钥进行签名的应用以及特权系统应用授予 READ_PRIVILEGED_PHONE_STATE 权限。
影响的api有:
* TelephonyManager#getDeviceId
* TelephonyManager#getImei
* TelephonyManager#getMeid
* TelephonyManager#getSimSerialNumber
* TelephonyManager#getSubscriberId
* Build#getSerial
意思是:
安卓10之前,加了权限READ_PHONE_STATE,就可以读取IMSI等值了
现在必须用READ_PRIVILEGED_PHONE_STATE权限才可以
但是此处代码中却无法识别
那去试试,换个安卓10之前版本的安卓手机看看如何
另外一个安卓9的手机在充电,待会再去测
暂时注释掉代码试试:
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PRIVILEGED_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
//            return;
//        }
结果:
都还是空
且给了此处app加了所有权限,问题依旧。
注意到:
系统仅会向使用平台密钥进行签名的应用以及特权系统应用授予 READ_PRIVILEGED_PHONE_STATE 权限
但是此处:如何才能实现 使用平台密钥进行签名的应用
暂时还不清楚
另外有个:
特许权限白名单  |  Android 开源项目  |  Android Open Source Project
看起来
/etc/permissions/privapp-permissions-platform.xml
<privapp-permissions package="com.android.cellbroadcastreceiver">
。。。
    <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
。。。
</privapp-permissions>
有我们希望的
android.permission.READ_PRIVILEGED_PHONE_STATE
但是:此处小米9的安卓10中,无法找到这个文件
因为是系统隐藏文件,没有root权限,就无法找到和编辑
ES文件浏览器中,根目录/下是空 
【总结】
此处小米9是安卓10的系统,没有权限获取IMSI。
不论是adb命令行还是代码中(没有root没法加白明白,使得READ_PRIVILEGED_PHONE_STATE实际上没权限),无法获取到IMSI

转载请注明:在路上 » 【无法解决】安卓10的小米9中获取不到IMSI

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
96 queries in 0.186 seconds, using 23.36MB memory