一、需要权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
二、获取方法:
- 常规方法:
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
String iccid = telephonyManager.getSimSerialNumber();
String phoneNumber = telephonyManager.getLine1Number();
在 Android Q 以后,就不能获取到值了
如果是双卡手机,SIM卡槽1插卡时,获取到的是1卡的值。SIM卡槽1没有插卡时,获取到的是2卡的值。
- 第二种方法:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1)
{
SubscriptionManager sm = SubscriptionManager.from(context);
List<SubscriptionInfo> sis =sm.getActiveSubscriptionInfoList();
if (sis.size() >= 1)
{
SubscriptionInfo si1 = sis.get(0);
String iccId1 = si1.getIccId();
String phoneNum1 = si1.getNumber();
}
if (sis.size() >= 2)
{
SubscriptionInfo si2 = sis.get(1);
String iccId2 = si2.getIccId();
String phoneNum2 = si2.getNumber();
}
// 获取SIM卡数量相关信息:
int count = sm.getActiveSubscriptionInfoCount();//当前实际插卡数量
int max = sm.getActiveSubscriptionInfoCountMax();//当前卡槽数量
}
只能在API 22及以上使用
可以获取到卡槽数量、当前插卡数量
可以获取到每个卡的信息:ICCID、电话号码等