在Android中获取SIM序列号

时间:2015-09-28 14:14:58

标签: android

我需要确保无需在指定设备中输入PIN即可使用SIM卡,但必须在其他设备中使用。 (正在使用的设备已植根,应用程序已安装为系统应用程序)

我想要的是识别SIM卡,并以编程方式输入引脚(如果已知/已保存)。

我可以在需要时输入已知的密码,但我的SIM识别有问题。

我发现在输入正确的PIN码之前,我无法获得SIM序列号或用户ID。

我正在使用的方法(具有权限等):

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.getSimSerialNumber();

问题是,如果引脚是必需的并且尚未输入,则此方法返回null。

我的问题是,是否有某种解决方法。 有可能吗? 还有另一种方法吗?

赞赏的想法和方法。 提前致谢。

2 个答案:

答案 0 :(得分:0)

TelephonyManager tm = (TelephonyManager) 
                getSystemService(Context.TELEPHONY_SERVICE);
}
String simID = tm.getSimSerialNumber();
String telNumber = tm.getLine1Number();
String IMEI = tm.getDeviceId();

许可:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

您的问题:

返回的电话号码是存储在SIM卡MSISDN上的电话号码,某些运营商没有填写。如果在印度,请尝试使用Virtafone的Airtel。

答案 1 :(得分:0)

可以使用SubscriptionManager,但 Android 10和在API级别22中添加的SubscriptionManager不能将其用于第三方应用

// Requires, android.permission.READ_PHONE_STATE
SubscriptionManager sm = SubscriptionManager.from(mContext);

// it returns a list with a SubscriptionInfo instance for each simcard
// there is other methods to retrieve SubscriptionInfos List<SubscriptionInfo> 
sis = sm.getActiveSubscriptionInfoList();

// getting first SubscriptionInfo
SubscriptionInfo si = sis.get(0);