2012-07-03 19 views
25

Existen 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 características no están respaldadas en Android.Android tarjeta SIM dual API

A pesar de esto, existen dos teléfonos SIM, y aplicaciones como MultiSim parecen ser capaces de detectar esto de alguna manera independiente del fabricante.

Así, a partir de ese reconocimiento, vamos a tratar de hacer algunas preguntas más puntiagudas:

  • ¿Tiene "SDK de Android no soporta múltiples SIM ofrece" significa que no existen estas características, o que es simplemente una mala idea para tratar de usarlos?
  • ¿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 a varias tarjetas SIM)
  • ¿Hay algún informe de algún fabricante que exponga varias 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 punto de todo esto es simple ejecución de este algoritmo:. Enviar un SMS con la tarjeta SIM 1; si falla la entrega, cambie a la tarjeta SIM 2 y vuelva a enviar el mensaje de esa manera)

+0

@ user1447002-¿Has tenido éxito en la construcción de esta aplicación ... ?? Porque tengo los mismos problemas y tengo que proporcionar una característica similar en mi aplicación. –

+0

No, no. He visto publicaciones de personas internas en Google, Samsung y Motorola en el sentido de que no están haciendo que el código esté disponible. –

+0

@ user1447002 -Gracias hombre ... pero ¿encontraste alguna alternativa a eso ... ?? –

Respuesta

3

Android no es compatible con múltiples funciones SIM antes de API 22. Pero a partir de Android 5.1 (Nivel de API 22) en adelante, Android comenzó a admitir varias tarjetas SIM. Más detalles sobre Android Documentation

referencia de este Original Answer

8

hay 3 categorías diferentes ...

  1. características soportadas y documentados
  2. características y un-documentado
  3. 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.

Dicho esto, no significa que no se pueda utilizar, solo significa que Android (o para el caso, google o incluso manufaturer) no es compatible con la funcionalidad de sus aplicaciones.

Pero podría funcionar, por ejemplo, los contactos son algo similar.

A continuación, puede preguntar cómo todos sabrían acerca de 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.

+0

He examinado detenidamente la fuente, en la medida en que pude (lo mencioné en mi primera publicación, pero no muy prominente). Si alguien lo ha hecho y ha tenido mejor suerte, me gustaría saberlo. –

+0

Puede usar la reflexión de Java para obtener información de doble SIM. [Vea aquí la demostración] (http://stackoverflow.com/a/17499889/703851) –

+1

@ GauravShah, entonces de todos modos ... ¿cómo enviarlo a elegir SIM 1/2 mientras se envía el sms a través del código? – gumuruh

-1
<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 un trabajo de doble sim también, y usted no necesita llamar a este receptor, ya que se ejecutará de forma remota

7

Puede utilizar MultiSim biblioteca para obtener detalles de los dispositivos multi-SIM.

Availbale información de cada tarjeta SIM: imei, imsi, número de serie sim, estado sim, código operador sim, nombre del operador sim, iso país sim, código operador red, nombre operador red, red operador iso, tipo de red, red itinerancia.

Sólo tiene que añadir la biblioteca por las dependencias Gradle en build.gradle aplicación:

dependencies { 
    compile 'com.kirianov.multisim:multisim:[email protected]' 
} 

No se olvide de añadir el permiso requerido en AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

utilizar código similar en el 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(); 
    } 
} 
Cuestiones relacionadas