Обнаружение текущей / основной SIM-карты в мобильном телефоне с двумя SIM-картами

У меня есть мобильный телефон с двумя SIM-картами, на котором мое приложение отображает информацию о SIM-карте и операторе. Но (очевидно) он обнаруживает и показывает детали только SIM1, а не SIM2. Есть ли способ получить доступ к данным SIM2?

Я знаю, что Android по умолчанию не поддерживает две SIM-карты и что производитель мобильных устройств настраивает его таким образом, что Android использует выбранную SIM-карту (SIM1 или SIM2, в зависимости от того, что выберет пользователь) в качестве основной (для создания вызов), а другая SIM-карта находится в режиме ожидания (срабатывает при поступлении вызова). Должен быть способ обнаружить эту основную SIM-карту.

Я не заинтересован в получении данных обеих SIM-карт одновременно. Требовать только сведения о SIM-карте, выбранной пользователем в качестве основной для совершения вызовов.

Любая ссылка/рабочий пример/предложения, любая помощь будет высоко оценена.

Спасибо


person Ramanathan    schedule 05.01.2014    source источник


Ответы (2)


Чтобы увидеть состояние SIM1, введите в консоли adb shell dumpsys telephony.registry.

Чтобы увидеть состояние SIM2, введите в консоли adb shell dumpsys telephony.registry2.

mCallState изменяется при входящем/исходящем звонке. Это позволяет сообщить вам, какая SIM-карта используется для вызова

Чтобы увидеть дополнительную информацию: adb shell getprop|grep gsm

Когда вы вызываете dumpsys из Java-приложения, вам нужен android.permission.DUMP в манифесте. Но это не работает на некоторых новых устройствах.

На некоторых телефонах может работать этот код, чтобы узнать сим-карта по умолчанию:

Object tm = getSystemService(Context.TELEPHONY_SERVICE);
Method method_getDefaultSim;    
int defaultSim = -1;
try {
    method_getDefaultSim = tm.getClass().getDeclaredMethod("getDefaultSim");
    method_getDefaultSim.setAccessible(true);
    defaultSim = (Integer) method_getDefaultSim.invoke(tm);
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Method method_getSmsDefaultSim;
int smsDefaultSim = -1;
try {
    method_getSmsDefaultSim = tm.getClass().getDeclaredMethod("getSmsDefaultSim");
    smsDefaultSim = (Integer) method_getSmsDefaultSim.invoke(tm);
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
person eGregory    schedule 28.10.2014
comment
При использовании этой SIM-карты всегда приходит «0» и SMS «1». Даже выбрал сим или «Сначала спроси» - person Vineesh TP; 27.06.2017

Шаг № 1: Составьте список всех производителей устройств Android, у которых есть 1+ устройство с двумя SIM-картами.

Шаг № 2: Свяжитесь с этими производителями и задайте им свои вопросы.

Как вы написали:

Я знаю, что Android по умолчанию не поддерживает работу с двумя SIM-картами и что производитель мобильного телефона настраивает его.

Нет требования, чтобы какой-либо конкретный производитель устройств настраивал его так же, как это делает любой другой производитель, и нет требования, чтобы какой-либо конкретный производитель устройств настраивал его так, чтобы это было видно разработчику приложения. Следовательно, единственный способ получить желаемую информацию, если поддержка приложения действительно доступна, — это связаться с производителем.

person CommonsWare    schedule 05.01.2014