SubscriptionInfo.getMnc()对于具有不同运营商的两个sim返回相同的值



我试图在Android 5.1设备中获得MCC和MNC号码(基本上我想要IMSI号码,但这些也足够了),具有双卡(都是活动的)。由于5.1支持双卡,所以我使用订阅管理器如下:

SubscriptionManager manager = SubscriptionManager.from(this);
List<SubscriptionInfo> sil = manager.getActiveSubscriptionInfoList();
    if (sil != null) {
        for (SubscriptionInfo subInfo : sil) {
            Log.v("TestMain", "SubInfo:" + subInfo);
        }
    } else {
        Log.v("TestMain", "SubInfo: list is null");
    }

,得到如下输出:

07-24 18:28:32.162    3844-3844/? V/TestMain﹕ SubInfo:{id=1, mcc 405 mnc 803, iccId=89918030914128062059 simSlotIndex=0 displayName=Aircel Karnataka carrierName=Aircel — Aircel Karnataka nameSource=0}
07-24 18:28:32.162    3844-3844/? V/TestMain﹕ SubInfo:{id=2,  mcc 405 mnc 803, iccId=8991860044481968955 simSlotIndex=1 displayName=CARD 2 carrierName=Vodafone Karnataka nameSource=0}

MCC(与在同一国家相同)请注意,跨国公司是相同的,尽管运营商不同。

当我关掉电话时,我在日志记录中看到这行:

07-24 18:31:02.295      616-616/? V/KeyguardUpdateMonitor﹕ SubInfo:{id=1,  mcc 405 mnc 803, iccId=89918030914128062059 simSlotIndex=0 displayName=CARD 1 carrierName=Emergency calls only — Aircel Karnataka nameSource=0}
07-24 18:31:02.295      616-616/? V/KeyguardUpdateMonitor﹕ SubInfo:{id=2,  mcc 404 mnc 86, iccId=8991860044481968955 simSlotIndex=1 displayName=CARD 2 carrierName=Emergency calls only — Vodafone Karnataka nameSource=0}

正如您所看到的,keyguard应用程序为sim卡获得了MNC的权利。

所以我研究了keyguard应用程序的代码,发现代码与我使用的代码相同来自Android源代码的代码摘自这里:

protected void handleSimSubscriptionInfoChanged() {
        if (DEBUG_SIM_STATES) {
            Log.v(TAG, "onSubscriptionInfoChanged()");
            List<SubscriptionInfo> sil = mSubscriptionManager.getActiveSubscriptionInfoList();
            if (sil != null) {
                for (SubscriptionInfo subInfo : sil) {
                    Log.v(TAG, "SubInfo:" + subInfo);
                }
            } else {
                Log.v(TAG, "onSubscriptionInfoChanged: list is null");
            }
        }

我探索了更多,发现即使是keyguard应用程序只有在手机关闭时才能获得MCC,其他时候即使它为两个模拟人生获得相同的MNC。但承运人名称总是不同的。

这是一个bug在Android 5.1或我做错了什么?

我在三星J5的Android 5.1上也遇到了同样的问题,但在Moto X Play的Android 6.0上却可以正常工作。由于SubscriptionManager是在Android 5.1中引入的,我猜这是Android 5.1中的一个错误,在Android m中得到了纠正。

这是android 5.1中的一个bug,在我更新手机后得到了修复

最新更新