我试图获得具有双Sim(均为活动)的Android 5.1设备中的MCC和MNC编号(基本上我想要IMSI编号但这些也足够了)。由于5.1支持双Sim,所以我使用了这样的Subscription管理器:
In [18]: from itertools import chain
In [25]: B = []
In [26]: B.append(list(list(chain.from_iterable(A))))
In [27]: B
Out[27]: [[1, 2, 3, 4, 5, 6, 7, 8, 15, 16]]
得到了这个输出:
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");
}
MCC(将与同一个国家/地区相同) 请注意,虽然运营商不同,但MNC是相同的。
当我关掉手机时,我在logcat中看到了这一行:
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}
正如您所看到的那样,密钥保护应用程序可以让MNC适用于SIM卡。
因此,我探索了密钥保护应用程序的代码,发现代码与我使用的代码相同 Android源代码取自here:
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}
我进行了更多研究,发现即使是键盘保护应用程序只有在手机关机时才能使MCC正常运行,有时甚至可以为两个SIM卡获得相同的MNC。但是运营商名称始终是不同的。
这是Android 5.1中的错误还是我做错了什么?
答案 0 :(得分:0)
我在三星J5的Android 5.1中遇到了同样的问题,但它在Moto X Play的Android 6.0中工作。由于 SubscriptionManager 是在Android 5.1中引入的,我想这是Android 5.1中的一个错误,在Android M中已得到纠正。
答案 1 :(得分:0)
这是android 5.1中的错误,在我更新手机后得到修复