Как я могу проверить, доступна ли SIM -карта в устройстве Android?
-
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;
}