Android:TelephonyManager.getSimSerialNumber()返回null

时间:2011-04-05 13:02:22

标签: android telephony telephonymanager

在哪种情况下此方法返回空引用? 只能依靠SIM卡吗? 在这些情况下,不存在检索后者的识别号的替代方法吗?

感谢所有人!

3 个答案:

答案 0 :(得分:2)

请确保您是否在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>

所有最好的

答案 1 :(得分:1)

尝试以下代码..我将帮助你完整..

TelehponyManager manager = (TelehponyManager)getSystemService(TELEPHONY_SERVICE);

String imei = manager.getDeviceId();

String imsi = manager.getSubscriberId();

答案 2 :(得分:0)

getSimSerialNumber()需要Android 10及更高版本的特权,第三方应用无法注册此权限。

请参阅:https://developer.android.com/about/versions/10/privacy/changes#non-resettable-device-ids

一个可能的解决方案是使用Android 5.1中的TELEPHONY_SUBSCRIPTION_SERVICE,以获取sim序列号。步骤如下:

  • 检查READ_PHONE_STATE权限。
  • 获取活动订阅列表。(返回所有活动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();
            }
        }
    

检查是否有帮助