web-dev-qa-db-fra.com

Comment puis-je vérifier si la carte SIM est disponible dans un appareil Android?

J'ai besoin d'aide pour vérifier si un appareil dispose d'une carte SIM par programmation. Veuillez fournir un exemple de code.

48
Senthil Mg

Utilisez TelephonyManager.

http://developer.Android.com/reference/Android/telephony/TelephonyManager.html

Comme le note Falmarri, vous le ferez voulez utiliser getPhoneType D'ABORD, pour voir si vous avez même affaire à un téléphone GSM. Si vous l'êtes, vous pouvez également obtenir l'état SIM.

TelephonyManager telMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    int simState = telMgr.getSimState();
            switch (simState) {
                case TelephonyManager.SIM_STATE_ABSENT:
                    // do something
                    break;
                case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
                    // do something
                    break;
                case TelephonyManager.SIM_STATE_PIN_REQUIRED:
                    // do something
                    break;
                case TelephonyManager.SIM_STATE_PUK_REQUIRED:
                    // do something
                    break;
                case TelephonyManager.SIM_STATE_READY:
                    // do something
                    break;
                case TelephonyManager.SIM_STATE_UNKNOWN:
                    // do something
                    break;
            }

MODIFIER:

À partir de l'API 26 ( Android O Preview), vous pouvez interroger SimState pour des emplacements de carte SIM individuels en utilisant getSimState(int slotIndex) ie:

int simStateMain = telMgr.getSimState(0);
int simStateSecond = telMgr.getSimState(1);

documentation officielle

Si vous développez avec une api plus ancienne, vous pouvez utiliser TelephonyManager's

String getDeviceId (int slotIndex)
//returns null if device ID is not available. ie. query slotIndex 1 in a single sim device

int devIdSecond = telMgr.getDeviceId(1);

//if(devIdSecond == null)
// no second sim slot available

qui a été ajouté dans l'API 23 - docs ici

111
Charlie Collins

Vous pouvez vérifier avec le code ci-dessous:

public static boolean isSimSupport(Context context)
    {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);  //gets the current TelephonyManager
        return !(tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT);

    }
8
Arun kumar

J'ai trouvé une autre façon de procéder.

public static boolean isSimStateReadyorNotReady() {
        int simSlotCount = sSlotCount;
        String simStates = SystemProperties.get("gsm.sim.state", "");
        if (simStates != null) {
            String[] slotState = simStates.split(",");
            int simSlot = 0;
            while (simSlot < simSlotCount && slotState.length > simSlot) {
                String simSlotState = slotState[simSlot];
                Log.d("MultiSimUtils", "isSimStateReadyorNotReady() : simSlot = " + simSlot + ", simState = " + simSlotState);
                if (simSlotState.equalsIgnoreCase("READY") || simSlotState.equalsIgnoreCase("NOT_READY")) {
                    return true;
                }
                simSlot++;
            }
        }
        return false;
    }
2
kakopappa