在双SIM卡电话中调用TelephonyMananger.getSimSerialNumber()时,会检查哪个SIM卡插槽?

时间:2018-09-11 06:26:19

标签: android telephonymanager

我需要SIM序列号来标识要应用的SIM卡。对于单个SIM手机,该代码非常简单,

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

但是,当我在双SIM卡手机上对其进行测试时,它会变得很奇怪,因为我不确定返回的序列号是来自插槽1还是插槽2。是否有办法获得两个SIM卡的序列号?还是我可以通过任何方式确定调用上述代码时哪个Sim插槽正在返回序列号?

P.S。我不需要IMEI号码或IMSI号码。我特别需要SIM序列号(SSN)。

2 个答案:

答案 0 :(得分:1)

检查。

TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    SubscriptionManager manager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    List<SubscriptionInfo> infoList = manager.getActiveSubscriptionInfoList();

    for (int i = 0; i < infoList.size(); i++) {

        SubscriptionInfo info = infoList.get(i);
        //info.getSimSlotIndex() <- sim card slot number
        //info.getNumber() <- sim card phone number (if exist, you can set this in sim card management)
    }

答案 1 :(得分:0)

对于API级别> = 22

可以使用 SubscriptionManager类(已添加到API级别22 https://developer.android.com/reference/android/telephony/SubscriptionManager中)

SubscriptionManager sManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE)
SubscriptionInfo infoSim1 = sManager.getActiveSubscriptionInfoForSimSlotIndex(0);
SubscriptionInfo infoSim2 = sManager.getActiveSubscriptionInfoForSimSlotIndex(1);

对于API级别<= 21

对于单个SIM卡:TelephonyManager.getSimSerialNumber()

对于双卡双待:取决于手机的制造商。 没有定义的方法可以使API级别21以下的双SIM卡获得Sim Serial Number