3

在什么情况下这个方法返回一个空引用?只能靠sim卡吗?在这些情况下,是否不存在检索后者标识号的替代方法?

谢谢大家!

4

3 回答 3

3

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

一切顺利

于 2011-04-09T11:26:39.777 回答
1

试试下面的代码..我会为你全力以赴..

TelehponyManager manager = (TelehponyManager)getSystemService(TELEPHONY_SERVICE);

String imei = manager.getDeviceId();

String imsi = manager.getSubscriberId();
于 2011-04-05T13:21:20.910 回答
1

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();
            }
        }
    

检查这是否有帮助

于 2020-01-02T09:14:08.263 回答