Обнаружение статуса двух SIM-карт в телефоне с двумя SIM-картами

Я хочу определить, есть ли две SIM-карты в моем телефоне с двумя SIM-картами программно. Я нашел один API (TelephonyManager.getSIMState()), но для обычных телефонов с одной SIM-картой. Существуют ли какие-либо API-интерфейсы для определения того, вставлены ли две SIM-карты в мой телефон с двумя SIM-картами?

Ответ 1

Android не поддерживает несколько SIM-карт, по крайней мере, из SDK. Производители устройств, которые создали устройства с несколькими SIM-картами, делают это самостоятельно. Приглашаем вас связаться с производителем вашего устройства и посмотреть, есть ли у них SDK-надстройка или что-то, что позволяет вам получить доступ ко второй SIM-карте.

Изменить: (15 июля 2015 г.)

С API 22 вы можете проверить наличие нескольких SIM-карт с помощью метода SubscriptionManager getActiveSubscriptionInfoList(). Подробнее о Android-документах.

Ответ 2

Теперь, если на телефоне включен MTK, вы можете использовать класс TelephonyManagerEx из MediaTek SDK.

Посмотрите документы.

Ответ 3

Ну, это не дурацкое доказательство. Но если у вас две SIM-карты, которые находятся на двух разных сетевых операторах, вы можете попробовать что-то вроде этого:

PhoneServiceStateListener listener = new PhoneServiceStateListener(this);
tm.listen(listener, PhoneStateListener.LISTEN_SERVICE_STATE);


.
.
.
class PhoneServiceStateListener extends PhoneStateListener {
Context context = null;

public PhoneServiceStateListener(Context context) {
    this.context = context;
}

public PhoneServiceStateListener() {
}

@Override
public void onServiceStateChanged(ServiceState serviceState) {

    if (serviceState.getState() == ServiceState.STATE_IN_SERVICE) {
        //You get this event when your SIM is in service.
        //If you get this event twice, chances are more that your phone is Dual SIM.
        //Alternatively, you can toggle Flight Mode programmatically twice so
        //that you'll get service state changed event.
    }
    super.onServiceStateChanged(serviceState);
}

}

В идеале вы получите событие изменения состояния SIM-карты для обеих SIM-карт, а затем вы можете проверить имя оператора сети или что-то подобное, чтобы проверить наличие двух SIM-карт. Но вам нужно иметь две SIM-карты, работающие в двух разных сетях.

Ответ 4

final SubscriptionManager subscriptionManager = SubscriptionManager.from(getApplicationContext());
    final List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();
    int simCount = activeSubscriptionInfoList.size();
    btnBack.setText(simCount+" Sim available");
    Log.d("MainActivity: ","simCount:" +simCount);

    for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfoList) {
        Log.d("MainActivity: ","iccId :"+ subscriptionInfo.getIccId()+" , name : "+ subscriptionInfo.getDisplayName());
    }