Как я могу проверить, доступна ли SIM -карта в устройстве Android?

StackOverflow https://stackoverflow.com/questions/3981007

  •  09-10-2019
  •  | 
  •  

Вопрос

Мне нужна помощь в проверке того, есть ли у устройства программа SIM -карта. Пожалуйста, предоставьте пример кода.

Это было полезно?

Решение

Используйте TelephonyManager.

http://developer.android.com/reference/android/telephony/telephonymanager.html

Как отмечает Фалмарри, вы будут хочу использовать getPhoneType Прежде всего, чтобы увидеть, имеете ли вы даже дело с телефоном GSM. Если вы, то вы также можете получить состояние 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;
            }

РЕДАКТИРОВАТЬ:

Начиная с API 26 (Android o Предварительный просмотр) вы можете запросить SIMSTATE для отдельных слотов SIM - getSimState(int slotIndex) т.е.:

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

официальная документация

Если вы развиваетесь с API и более старым, вы можете использовать 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

который был добавлен в API 23 - документы здесь

Другие советы

Вы можете проверить с кодом ниже:

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

    }

Нашел другой способ сделать это.

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;
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top