tiene - Detecta el estado de dos tarjetas SIM en un teléfono Android con SIM dual
que es dual sim en un celular (4)
Quiero detectar si hay dos tarjetas SIM en mi teléfono Android de doble SIM mediante programación. Encontré una API ( TelephonyManager.getSIMState()
), pero es para teléfonos normales con SIM única. ¿Hay alguna API para detectar si hay dos SIM insertadas en mi teléfono con SIM dual?
A partir de ahora, si el teléfono tiene MTK, puede usar la clase TelephonyManagerEx desde MediaTek SDK.
Echa un vistazo a los documentos .
Android no admite varias tarjetas SIM, al menos desde el SDK. Los fabricantes de dispositivos que han creado dispositivos multi-SIM lo están haciendo por su cuenta. Puede ponerse en contacto con el fabricante de su dispositivo y ver si tiene un complemento SDK o algo que le permita acceder a la segunda SIM.
Edición: (15 de julio de 2015)
Desde la API 22, puede buscar múltiples tarjetas SIM utilizando el método getActiveSubscriptionInfoList()
. Más detalles en Android Docs .
Bueno, esto no es infalible. Pero si tiene dos tarjetas SIM que están en dos operadores de red diferentes, puede intentar algo como esto:
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);
}
}
Lo ideal es que obtengas un evento de cambio de estado de servicio de la SIM para ambas SIM y luego puedes verificar el nombre del operador de red o algo así para verificar si tienes dos tarjetas SIM. Pero necesitas tener dos tarjetas SIM que se ejecutan en dos redes diferentes.
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());
}