web-dev-qa-db-fra.com

Détecter l'état de deux cartes SIM dans un téléphone Android double SIM

Je souhaite détecter si deux cartes SIM sont présentes par programme dans mon téléphone Android double SIM. J'ai trouvé une API (TelephonyManager.getSIMState()), mais il s'agit d'un téléphone normal à une seule carte SIM. Existe-t-il des API permettant de détecter si deux cartes SIM sont insérées dans mon téléphone à double carte SIM?

19
candy

Android ne prend pas en charge plusieurs cartes SIM, du moins à partir du SDK. Les fabricants d’appareils qui ont créé des appareils multi-SIM le font eux-mêmes. Nous vous invitons à contacter le fabricant de votre appareil pour savoir s'il dispose d'un add-on SDK ou de quelque chose qui vous permet d'accéder à la deuxième carte SIM.

Edit: _ ​​(15 juillet 2015)

Depuis l'API 22, vous pouvez vérifier la présence de plusieurs cartes SIM à l'aide de la méthode SubscriptionManager's getActiveSubscriptionInfoList(). Plus de détails sur Docs Android .

31
CommonsWare

À partir de maintenant, si le téléphone est alimenté par MTK, vous pouvez utiliser la classe TelephonyManagerEx à partir de MediaTek SDK. 

Jetez un coup d'oeil à les docs .

3
Andrey Kopeyko

Eh bien, ce n’est pas infaillible. Mais si vous avez deux cartes SIM situées sur deux opérateurs de réseau différents, vous pouvez essayer quelque chose comme ceci:

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);
}

}

Idéalement, vous obtiendrez un événement de changement d'état du service SIM pour les deux cartes SIM, puis vous pourrez vérifier le nom de l'opérateur réseau ou quelque chose du genre pour vérifier si vous avez deux cartes SIM. Mais vous devez avoir deux cartes SIM fonctionnant sur deux réseaux différents.

1
Rajkiran
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());
    }
0
Pavitha