Я пытаюсь установить, когда на мультисим-устройстве Android (под управлением Android 7.0+) есть какие-либо работающие/активные сим-карты. Для этого я следую документации Google относительно подключения нескольких TelephonyManager к экземпляру TelephonyManager по умолчанию, как указано ниже: https://developer.android.com/reference/android/telephony/TelephonyManager.html#SIM_STATE_READY
Возвращенный TelephonyManager будет использовать подписку по умолчанию для всех вызовов. Чтобы вызвать API для конкретной подписки, используйте createForSubscriptionId(int). например telephonyManager = defaultSubTelephonyManager.createForSubscriptionId(subId);
В моем конкретном случае примерно так:
telephonyManager = (TelephonyManager) mContext
.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_SERVICE_STATE);
List subList = mSubManager.getActiveSubscriptionInfoList();
SubscriptionInfo firstSub = (SubscriptionInfo) subList.get(0);
mSim0TelephonyManager = telephonyManager.createForSubscriptionId(firstSub.getSubscriptionId());
mSim0TelephonyManager.listen(new Sim0PhoneStateListener(), PhoneStateListener.LISTEN_SERVICE_STATE);
int test = mSim0TelephonyManager.getSimState();
SubscriptionInfo secondSub = (SubscriptionInfo) subList.get(1);
mSim1TelephonyManager = telephonyManager.createForSubscriptionId(secondSub.getSubscriptionId());
mSim1TelephonyManager.listen(new Sim1PhoneStateListener(), PhoneStateListener.LISTEN_SERVICE_STATE);
int testw = mSim1TelephonyManager.getSimState();
Итак, сначала я получаю все активные подписки, что уже было проблемой, потому что на самом деле это не активные подписки, как в подписках, у которых есть состояние в обслуживании, это просто SIM-карты, вставленные в слоты для SIM-карт.
Это означает, что даже если вы деактивируете SIM-карту с помощью меню настроек Android, вы все равно получите эту SIM-карту как активную подписку !!!!
Следующая проблема заключается в том, что даже на деактивированных (без обслуживания!!!) SIM-картах я получаю значение 5 (https://developer.android.com/reference/android/telephony/TelephonyManager.html#SIM_STATE_READY).). Для меня это непонятно, состояние SIM готово, а вся SIM деактивирована. Это означает, что эти вызовы API вообще ненадежны...
Кроме того, после добавления PhoneStateListeners в отдельные новые TelephonyManagers я не получаю никаких звонков в реализации этих PhoneStateListeners, когда SIM-карты активируются/деактивируются через меню настроек Android...
Теперь мне интересно, не сломалось ли что-то в Android или, может быть, в реализации производителей устройств (тестирование на Samsung A5 2017 Duo и Huawei P9 Lite). К сожалению, эмулятор не поддерживает несколько сим-карт, поэтому я не могу протестировать на нем обычную ванильную версию Android Nougat :(
ОБНОВЛЕНИЕ:
Тем временем я нашел эту тему: Как получить PhoneStateListener при использовании двух SIM-карт
Казалось бы, на самом деле в реализации Google есть ошибка в прослушивании (прослушиватель PhoneStateListener, события int), которая приводит к тому, что экземпляр PhoneStateListener создается только для SubscriptionId по умолчанию, независимо от параметра, который передается в конструктор....