Después de mucha investigación en foros, ahora sé que no hay forma de encontrar el número de serie IMSI o SIM para ambas tarjetas SIM en un teléfono con doble SIM (excepto para contactar al fabricante). Ahora mi pregunta modificada es, ¿podemos detectar que el teléfono tiene dos SIM? Creo que se puede detectar con cierta inteligencia. Algunas formas en las que puedo pensar son:
Marcar un código USSD y rastrear los registros del número IMEI (probé esto con * 139 # en India. Funcionó). Esto me dará el número IMEI para la SIM desde la cual marqué el código USSD. (Se presume que el teléfono sigue las pautas de Android y tiene dos números IMEI).
Almacenamiento del número de serie de la SIM y / o IMSI para la SIM. Y después de la detección de cualquier otro IMSI / número de serie, incluso si el teléfono no se reinició (es decir, se cambió la SIM) rastreando algunos registros o mediante el manejo de eventos de transmisión.
Si marca * 06 # podrá ver ambos números IMEI. De alguna manera, obtén esos dos números. (Algo como captura de pantalla y análisis de imágenes para texto).
Si alguien puede pensar en otras formas, será bienvenido. Realmente agradecería cualquier tipo de ayuda con respecto a esto. Además, si alguien tiene información sobre las API de algún fabricante o enlaces para comunicarse con ellos, compártala con la gente de la comunidad.
Respuestas:
Actualización 23 de marzo de 2015:
Otra posible opción:
Puede utilizar la reflexión de Java para obtener ambos números IMEI.
Con estos números IMEI puede comprobar si el teléfono es DUAL SIM o no.
Prueba la siguiente actividad:
Y aqui esta
TelephonyInfo.java
:Editar:
Obtener acceso a métodos como "getDeviceIdGemini" para obtener detalles de otras ranuras SIM permite predecir que el método existe.
Si el nombre de ese método no coincide con uno proporcionado por el fabricante del dispositivo, no funcionará. Debe encontrar el nombre del método correspondiente para esos dispositivos.
La búsqueda de nombres de métodos para otros fabricantes se puede realizar mediante la reflexión de Java de la siguiente manera:
EDITAR:
Como señaló Seetha en su comentario:
Está funcionando para ella. Tuvo éxito al obtener dos números IMEI tanto para la SIM en el dispositivo Samsung Duos.
Añadir
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
EDITAR 2:
El método utilizado para recuperar datos es para Lenovo A319 y otros teléfonos de ese fabricante (Credit Maher Abuthraa ):
fuente
com.android.internal.telephony.RILConstants$SimCardID
internamente. Incluso intenté crear esa clase con la misma firma de métodos y los mismos nombres de variables. Pero no hubo suerte. Intentará obtener el código fuente e intentará comprobarlo. Gracias.Tengo un dispositivo Samsung Duos con Android 4.4.4 y el método sugerido por Seetha en la respuesta aceptada (es decir, llamar a getDeviceIdDs) no me funciona, ya que el método no existe. Pude recuperar toda la información que necesitaba llamando al método "getDefault (int slotID)", como se muestra a continuación:
Además, reescribí el código que prueba iterativamente los métodos para recuperar esta información de modo que use una matriz de nombres de métodos en lugar de una secuencia de try / catch. Por ejemplo, para determinar si tenemos dos SIM activas podríamos hacer:
De esta manera, si se sugiere un nuevo nombre de método para algún dispositivo, simplemente puede agregarlo a la matriz y debería funcionar.
fuente
Hay varias soluciones nativas que encontré mientras buscaba la forma de verificar el operador de red.
Para API> = 17:
En AndroidManifest, agregue permiso:
Para obtener un operador de red, puede verificar los códigos mcc y mnc:
Para API> = 22:
Para API> = 23. Para verificar si el teléfono es dual / triple / many sim:
fuente
Puedo leer ambos IMEI del teléfono OnePlus 2
fuente
Estaba mirando los registros de llamadas y noté que además de los campos habituales en el contenido de managedCursor, tenemos una columna "simid" en los teléfonos Dual SIM (verifiqué en Xolo A500s Lite), para etiquetar cada llamada en el registro de llamadas con una SIM. Este valor es 1 o 2, probablemente denota SIM1 / SIM2.
No encontré esta columna en un solo teléfono SIM (verifiqué en Xperia L).
Entonces, aunque no creo que esta sea una forma infalible de verificar la naturaleza de la SIM dual, la estoy publicando aquí porque podría ser útil para alguien.
fuente
Consejos:
Puedes intentar usar
ctx.getSystemService("phone_msim")
en vez de
ctx.getSystemService(Context.TELEPHONY_SERVICE)
Si ya probó la respuesta de Vaibhav y
telephony.getClass().getMethod()
falla, lo anterior es lo que funciona para mi móvil Qualcomm .fuente
Encontré estas propiedades del sistema en Samsung S8
Además, según la fuente: https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/com/android/internal/telephony/TelephonyProperties.java
getprop persist.radio.multisim.config
devuelve "dsds
" o "dsda
" en multi SIM.He probado esto en Samsung S8 y funciona
fuente
Commonsware dice que esto no es posible. Consulte lo siguiente:
No es posible detectar Dual SIM con Android SDK.
Aquí hay más diálogo sobre el tema:
El chico del equipo de desarrollo de Google dice que no es posible detectar Dual SIM usando Android SDK.
fuente