SubscriptionInfo.getMnc()对于运营商不同的SIM卡返回相同的值。

15

我试图在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(与同一国家相同) 请注意,尽管运营商不同,MNC是相同的。

当我关闭手机时,在我的日志记录中看到这些行:

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}

正如您所看到的,关键保护应用程序为两个SIM卡正确获取了移动网络代码。

因此,我研究了关键保护应用程序的代码,并发现代码与我使用的代码相同。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");
            }
        }

我继续探索后发现,即使在手机关闭时键盘应用程序也只有在正确切换时才能正确获取MCC,其他时间它甚至为两张SIM卡获取相同的MNC。但运营商名称始终是不同的。

这是Android 5.1中的一个错误还是我做错了什么?


我想这可能是Android系统的一个漏洞,在我更新手机后得到了修复。 - Build3r
在运行Android 5.1的Motorola Moto E上有完全相同的问题。 - Beshoy Fayez
我在Android 6上遇到了同样的问题。 - jollyroger
2个回答

0

我在三星J5的Android 5.1中遇到了同样的问题,但在Moto X Play的Android 6.0中可以正常工作。由于SubscriptionManager是在Android 5.1中引入的,我猜测这是Android 5.1中的一个bug,在Android M中得到了修复。


0

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


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