Android10.0 SDK29版本拿不到手机的IMSI解决办法

手机到了10.0获取getSubscriberId()会报错,直接提示用户没有10187权限。然后看google文档里解释如此:

在使用 Android 标识符时,请遵循以下最佳做法:

  1. 避免使用硬件标识符。 在大多数用例中,您可以避免使用硬件标识符,例如 SSAID (Android ID) 和 IMEI,而不会限制所需的功能。

    自 Android 10(API 级别 29)起,您的应用必须是设备或个人资料所有者应用,具有特殊运营商许可,或具有 READ_PRIVILEGED_PHONE_STATE 特权,才能访问不可重置的设备标识符。

  2. 只针对用户分析或广告用例使用广告 ID。 在使用广告 ID 时,请始终遵循用户关于广告跟踪的选择。此外,请确保标识符无法关联到个人身份信息 (PII),并避免桥接广告 ID 重置。

  3. 尽一切可能针对防欺诈支付和电话以外的所有其他用例使用实例 ID 或私密存储的 GUID。 对于绝大多数非广告用例,使用实例 ID 或 GUID 应该足矣。

  4. 使用适合您的用例的 API 以尽量降低隐私权风险。 使用 DRM API 保护重要内容,并使用 SafetyNet API 防止滥用行为。SafetyNet API 是能够确定设备真伪而不会招致隐私权风险的最简单方法。

 

然后只能用Android_ID来替换,传说Android_ID也是唯一的,但是MISI的460080100开头的能看懂的人知道这个是啥东西(当然我不知道)

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    //获取Android_ID
    now_IMSI = Settings.System.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
} else {
    now_IMSI = tm.getSubscriberId();// 手机卡唯一标识,android 10.0获取不到
}

你可能感兴趣的:(Android10.0 SDK29版本拿不到手机的IMSI解决办法)