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獲取不到
}
發佈了58 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章