Я пытался получить номер MCC и MNC (в основном, я хочу номер IMSI, но этого также достаточно) на устройстве Android 5.1, имеющем двойной Sim (оба активных). Как 5,1 поддерживает двойной Sim, так что я использовал менеджер подписки, как это:SubscriptionInfo.getMnc() возвращает одно и то же значение для 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 (будет так же как это та же страна) заметить, что МНК являются так же, хотя носители различны.
Пока я выключая телефон Я видел эти строки в моем 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}
Как вы можете видеть, приложение клав получает 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");
}
}
Я исследовал немного и нашел, что даже клав приложения получают MCC прямо, только когда телефон выключается, а иногда даже он получает тот же MNC для обеих SIM-карт. Но имя перевозчика всегда отличается.
Является ли это ошибкой в Android 5.1 или я что-то не так?
Я полагаю, это была ошибка в Android, она исправлена после того, как я обновил телефон. – Build3r
Та же самая проблема на Motorola Moto E работает под управлением Android 5.1 –
У меня такая же проблема на Android 6. – jollyroger