我试图获得MCC和MNC号码(基本上我想要IMSI号码,但这些也足够了),在Android5.1设备上有双Sim (都是活动的)。因为5.1支持双Sim,所以我使用了如下所示的订阅管理器:
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}
如您所见,密钥保护应用程序为两个sim获得正确的MNC。
因此,我研究了密钥保护应用程序的代码,发现代码与使用从这里获取的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只有在手机关闭,其他时候,甚至它是得到相同的MNC为两个模拟人生。但承运人的名字总是不同的。
这是Android5.1中的一个bug,还是我做错了什么?
发布于 2016-05-23 06:02:53
我在三星J5的Android5.1中也遇到了同样的问题,但它在Moto中使用Android6.0。由于SubscriptionManager是在Android5.1中引入的,我想这是Android5.1中的一个错误,在Android中进行了修正。
https://stackoverflow.com/questions/31611898
复制相似问题