tener - ¿Cómo puedo verificar si la tarjeta Sim está disponible en un dispositivo Android?
tarjeta sim desactivada android (3)
Encontré otra manera de hacer esto.
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;
}
Necesito ayuda para verificar si un dispositivo tiene una tarjeta sim programáticamente. Por favor proporcione código de ejemplo.
Puedes consultar con el siguiente código:
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);
}
Utilice el administrador de telefonía.
http://developer.android.com/reference/android/telephony/TelephonyManager.html
Como señala Falmarri, usted querrá usar getPhoneType PRIMERO de todo, para ver si está tratando con un teléfono GSM. Si es así, entonces también puede obtener el estado de 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;
}
EDITAR:
A partir de la API 26 ( Android O Preview ), puede consultar las ranuras de sims individuales de getSimState(int slotIndex)
usando getSimState(int slotIndex)
es decir:
int simStateMain = telMgr.getSimState(0);
int simStateSecond = telMgr.getSimState(1);
Si está desarrollando con una API más antigua, puede usar 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
el cual fue agregado en la API 23 - docs here