在什么情况下这个方法返回一个空引用?只能靠sim卡吗?在这些情况下,是否不存在检索后者标识号的替代方法?
谢谢大家!
请确认您是否在 Android Manifest 中添加了以下权限,如果没有请添加此语句添加重试。
<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();
getSimSerialNumber() 从 Android 10 开始需要特权权限,第三方应用无法注册此权限。
请参阅:https ://developer.android.com/about/versions/10/privacy/changes#non-resettable-device-ids
一种可能的解决方案是使用 Android 5.1 中的 TELEPHONY_SUBSCRIPTION_SERVICE 来检索 sim 序列号。以下步骤:
从订阅对象中检索 sim 详细信息。
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();
}
}
检查这是否有帮助