verizon - Android dual SIM card API
sim card verizon (4)
Android no admite varias funciones de SIM antes de API 22. Pero desde Android 5.1 (nivel de API 22) en adelante, Android comenzó a admitir varias SIM. Más detalles sobre la documentación de Android
Referencia de esta respuesta original
Hay varias preguntas sobre el acceso a las funciones de doble SIM a través del SDK de Android, todas las cuales se responden con breves declaraciones de que tales funciones no están respaldadas en Android.
A pesar de esto, existen teléfonos con doble SIM, y aplicaciones como MultiSim parecen ser capaces de detectar esto de alguna manera independiente del fabricante.
Entonces, comenzando con ese reconocimiento, permítanme intentar hacer algunas preguntas más puntuales:
- ¿"Android SDK no admite múltiples funciones de SIM" significa que estas características no existen, o que simplemente es una mala idea intentar usarlas?
- ¿Hay un proveedor de contenido de Android o un paquete interno (com.android ...) que proporcione información de la tarjeta SIM? (TelephonyManager, por lo que puedo ver en los documentos y el código, no menciona ninguna tarjeta SIM múltiple)
- ¿Hay algún informe de algún fabricante que exponga múltiples características de SIM a los desarrolladores?
- Si tuviera que buscar la funcionalidad no documentada de un fabricante, ¿cómo podría hacerlo?
(Por cierto, el objetivo de todo esto es simplemente implementar este algoritmo: enviar un SMS con la tarjeta SIM 1; si falla la entrega, cambiar a la tarjeta SIM 2 y reenviar el mensaje de esa manera).
hay 3 categorías diferentes ...
- características compatibles y documentadas
- Funciones disponibles y no documentadas
- características no disponibles
Por lo tanto, las funciones de sim dual están disponibles pero no documentadas y, por lo tanto, no son compatibles oficialmente.
Una vez dicho esto, no significa que no será utilizable, solo significa que Android (o para el caso, google o incluso manufaturer) no es compatible con la funcionalidad de su aplicación.
Pero podría funcionar, porque, por ejemplo, los contactos son algo similar.
A continuación, puede preguntar cómo todos sabrían sobre las características si en caso de que no esté documentado ... Hola, Android es de código abierto. Ve a buscar el código y encuéntralo. Eso es lo que creo que hicieron los desarrolladores de multi sim.
Puede usar la biblioteca MultiSim
para obtener detalles de dispositivos multi-sim.
Información disponible de cada tarjeta SIM: IMEI, IMSI, número de serie SIM, estado SIM, código del operador SIM, nombre del operador SIM, ISO del país SIM, código del operador de red, nombre del operador de red, iso del operador de red, estado de roaming.
Simplemente agregue las líneas a continuación en su script de Gradle a nivel de aplicación:
dependencies {
compile ''com.kirianov.multisim:multisim:2.0@aar''
}
No olvide agregar el permiso requerido en AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Use un código similar en su código:
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(this);
// or
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(this, new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateInfo();
}
});
public void updateInfo() {
// for update UI
runOnUiThread(new Runnable() {
@Override
public void run() {
multiSimTelephonyManager.update();
useInfo();
}
}
// for update background information
multiSimTelephonyManager.update();
useInfo();
}
public void useInfo() {
// get number of slots:
if (multiSimTelephonyManager != null) {
multiSimTelephonyManager.sizeSlots();
}
// get info from each slot:
if (multiSimTelephonyManager != null) {
for(int i = 0; i < multiSimTelephonyManager.sizeSlots(); i++) {
multiSimTelephonyManager.getSlot(i).getImei();
multiSimTelephonyManager.getSlot(i).getImsi();
multiSimTelephonyManager.getSlot(i).getSimSerialNumber();
multiSimTelephonyManager.getSlot(i).getSimState();
multiSimTelephonyManager.getSlot(i).getSimOperator();
multiSimTelephonyManager.getSlot(i).getSimOperatorName();
multiSimTelephonyManager.getSlot(i).getSimCountryIso();
multiSimTelephonyManager.getSlot(i).getNetworkOperator();
multiSimTelephonyManager.getSlot(i).getNetworkOperatorName();
multiSimTelephonyManager.getSlot(i).getNetworkCountryIso();
multiSimTelephonyManager.getSlot(i).getNetworkType();
multiSimTelephonyManager.getSlot(i).isNetworkRoaming();
}
}
}
// or for devices above android 6.0
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(MyActivity.this, broadcastReceiverChange);
Usage:
// get info about slot ''i'' by methods:
multiSimTelephonyManager.getSlot(i).
Force update info
// force update phone info (needed on devices above android 6.0 after confirm permissions request)
multiSimTelephonyManager.update();
Handle of permissions request (6.0+)
// in YourActivity for update info after confirm permissions request on devices above android 6.0
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (multiSimTelephonyManager != null) {
multiSimTelephonyManager.update();
}
}
<receiver
android:name=".SimChangedReceiver"
android:enabled="true"
android:process=":remote" >
<intent-filter>
<action android:name="android.intent.action.SIM_STATE_CHANGED" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
SimChangedReceiver class
public class SimChangedReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equalsIgnoreCase("android.intent.action.SIM_STATE_CHANGED")) {
Log.d("SimChangedReceiver", "--> SIM state changed <--");
// do code whatever u want to apply action //
}
}
}
este es el trabajo para Dual Sim también, y no necesita llamar a este receptor porque se ejecutará de forma remota