在什么情况下,这个方法会返回一个空引用? 只能依靠SIM卡吗? 在这些情况下,不存在获取后者标识号的替代方法吗?
谢谢大家!
在什么情况下,这个方法会返回一个空引用? 只能依靠SIM卡吗? 在这些情况下,不存在获取后者标识号的替代方法吗?
谢谢大家!
从Android 10开始,getSimSerialNumber()需要特权权限,并且第三方应用程序无法注册此权限。
请参见:https://developer.android.com/about/versions/10/privacy/changes#non-resettable-device-ids
一种可能的解决方案是使用来自Android 5.1的TELEPHONY_SUBSCRIPTION_SERVICE来检索SIM串行号。以下是步骤:
Retrieve the sim details from Subscription Object.
if ( isPermissionGranted(READ_PHONE_STATE) ) {
String simSerialNo="";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
SubscriptionManager subsManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
List<SubscriptionInfo> subsList = subsManager.getActiveSubscriptionInfoList();
if (subsList!=null) {
for (SubscriptionInfo subsInfo : subsList) {
if (subsInfo != null) {
simSerialNo = subsInfo.getIccId());
}
}
}
} else {
TelephonyManager tMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
simSerialNo = tMgr.getSimSerialNumber();
}
}
请看这是否有帮助
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
.....
.....
.....
</application>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android......"/>
..........
</manifest>
最好的祝愿
尝试下面的代码..我会对你有所帮助的。
TelehponyManager manager = (TelehponyManager)getSystemService(TELEPHONY_SERVICE);
String imei = manager.getDeviceId();
String imsi = manager.getSubscriberId();