我注意到,在使用 Android 10/Q 设备时,我无法使用 TelephonyManager
获取 IMSI 号码,
TelephonyManager tel = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imsiNo = tel.getSubscriberId();
i 将始终获得 imsiNo 变量的空值,但在 Android SDK API 级别 28 或更低级别中,它将始终返回 imsi 值。
我已确保启用 READ_PHONE_STATE 权限,但在 Android 10/Q 中它将无法获取 imsi 号码。 Android 10/Q 或更高版本是否可以获取 IMSI 号码?
最佳答案
我正在使用以下代码在 android > Q 中获取 IMSI
private String getImsiFromSubscriptionManager() {
String simSerialNo = "";
try {
SubscriptionManager subsManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
List<SubscriptionInfo> subsList = subsManager.getActiveSubscriptionInfoList();
if (subsList != null) {
for (SubscriptionInfo subsInfo : subsList) {
if (subsInfo != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
simSerialNo = subsInfo.getMccString() + subsInfo.getMncString() + subsInfo.getIccId().substring(8, 18);
}
Utility.DEBUG_LOG(TAG,"imsiNumber:"+simSerialNo);
}
}
} else {
simSerialNo = "WiFi";
Utility.DEBUG_LOG(TAG,"imsiNumber:"+simSerialNo);
}
}
} catch (Exception e) {
e.printStackTrace();
}
if(simSerialNo.isEmpty())
simSerialNo = "N/A";
return simSerialNo;
}
关于java - 如何在 Android SDK API 级别 29 或更高版本中获取 IMSI 号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58213606/