SubscriptionInfo.getMnc() returns 不同运营商的两个 SIM 卡的值相同
SubscriptionInfo.getMnc() returns the same value for both the SIMs with different carriers
我试图在 Android 具有双 Sim(均处于活动状态)的 5.1 设备中获取 MCC 和 MNC 号码(基本上我想要 IMSI 号码,但这些也足够了)。由于 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(将与同一个国家相同)
请注意,尽管运营商不同,但 MNC 相同。
当我关闭 phone 时,我在 logcat 中看到了这一行:
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 来源取自 here:
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");
}
}
我进行了更多探索,发现即使是键盘锁应用程序也只有在 phone 关闭时才能正确获得 MCC,其他时候甚至它会为两个 SIM 获得相同的 MNC。但是运营商名称总是不同的。
这是 Android 5.1 中的错误还是我做错了什么?
我在 Samsung J5 的 Android 5.1 中遇到了同样的问题,但它在 Moto X Play 的 Android 6.0 中有效。由于 SubscriptionManager 是在 Android 5.1 中引入的,我猜这是 Android 5.1 中的一个错误,已在 Android M.[=10 中更正=]
这是 android 5.1 中的错误,在我更新 phone
后已修复
我试图在 Android 具有双 Sim(均处于活动状态)的 5.1 设备中获取 MCC 和 MNC 号码(基本上我想要 IMSI 号码,但这些也足够了)。由于 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(将与同一个国家相同) 请注意,尽管运营商不同,但 MNC 相同。
当我关闭 phone 时,我在 logcat 中看到了这一行:
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 来源取自 here:
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");
}
}
我进行了更多探索,发现即使是键盘锁应用程序也只有在 phone 关闭时才能正确获得 MCC,其他时候甚至它会为两个 SIM 获得相同的 MNC。但是运营商名称总是不同的。
这是 Android 5.1 中的错误还是我做错了什么?
我在 Samsung J5 的 Android 5.1 中遇到了同样的问题,但它在 Moto X Play 的 Android 6.0 中有效。由于 SubscriptionManager 是在 Android 5.1 中引入的,我猜这是 Android 5.1 中的一个错误,已在 Android M.[=10 中更正=]
这是 android 5.1 中的错误,在我更新 phone
后已修复