如何在安卓手机上获取第二张SIM卡的IMSI号码

3

我正在使用TelephonyManager,我可以获取SIM1的订阅者ID(IMSI),但无法获取第二个SIM卡的IMSI。然而,我能够获得两个SIM卡槽的IMEI号码,但仍然无法获取第二个SIM卡的IMSI信息。有没有方法可以获取这个信息?

2个回答

4

请记住,这是一种获取订阅者ID的折中方法,因此可能无法在所有设备上使用

它将适用于Android 5.1.1及以上版本,并需要android.permission.READ_PHONE_STATE权限

(请记得在上面的棉花糖Android版本中询问用户关于android.permission.READ_PHONE_STATE权限,因为它被标记为危险权限)

public String getSim1IMSI() {
    String imsi = null;
    TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    try {
        Method getSubId = TelephonyManager.class.getMethod("getSubscriberId", int.class);
        SubscriptionManager sm = (SubscriptionManager) getSystemService(TELEPHONY_SUBSCRIPTION_SERVICE);
        imsi = (String) getSubId.invoke(tm, sm.getActiveSubscriptionInfoForSimSlotIndex(0).getSubscriptionId()); // Sim slot 1 IMSI
        return imsi;
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
    return imsi;
}


public String getSim2IMSI() {
    String imsi = null;
    TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    try {
        Method getSubId = TelephonyManager.class.getMethod("getSubscriberId", int.class);
        SubscriptionManager sm = (SubscriptionManager) getSystemService(TELEPHONY_SUBSCRIPTION_SERVICE);
        imsi = (String) getSubId.invoke(tm, sm.getActiveSubscriptionInfoForSimSlotIndex(1).getSubscriptionId()); // Sim slot 2 IMSI
        return imsi;
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
    return imsi;
}

1
从Android 7.0开始,有一种本地方法可以实现此操作:tm.createForSubscriptionId(sm.getActiveSubscriptionInfoForSimSlotIndex(1).getSubscriptionId()).getSubscriberId() - davkutalek

0

2
这是IMEI而不是IMSI。 - davkutalek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接