Après de nombreuses recherches sur les forums, je sais maintenant qu'il n'y a aucun moyen de trouver le numéro de série IMSI ou SIM pour les deux cartes SIM dans un téléphone double SIM (sauf pour contacter le fabricant). Maintenant, ma question modifiée est la suivante: pouvons-nous détecter que le téléphone a deux cartes SIM? Je pense que cela peut être détecté avec une certaine intelligence. Il y a quelques façons dont je peux penser:
Composer un code USSD et tracer les journaux pour le numéro IMEI (j'ai essayé cela avec * 139 # en Inde. Cela a fonctionné.) Cela me donnera le numéro IMEI pour la carte SIM à partir de laquelle j'ai composé le code USSD. (Il est présumé que le téléphone suit les directives d'Android et possède deux numéros IMEI.)
Stockage du numéro de série SIM et / ou IMSI de la carte SIM. Et après détection de tout autre numéro IMSI / série même si le téléphone n'a pas été redémarré (c'est-à-dire que la carte SIM a été commutée) en traçant certains journaux ou par une gestion des événements de diffusion.
En composant le * 06 #, vous pourrez voir les deux numéros IMEI. D'une certaine manière, obtenez ces deux chiffres. (Quelque chose comme la capture d'écran et l'analyse d'image pour le texte.)
Si quelqu'un peut penser à d'autres moyens, ils sont les bienvenus. J'apprécierais vraiment toute sorte d'aide à ce sujet. De plus, si quelqu'un a des informations sur les API des fabricants ou des liens pour les contacter, veuillez les partager avec les membres de la communauté.
Réponses:
Mise à jour du 23 mars'15:
Autre option possible:
Vous pouvez utiliser la réflexion Java pour obtenir les deux numéros IMEI.
En utilisant ces numéros IMEI, vous pouvez vérifier si le téléphone est une double carte SIM ou non.
Essayez l'activité suivante:
Et voici
TelephonyInfo.java
:Éditer :
L'accès à des méthodes telles que "getDeviceIdGemini" pour les détails d'un autre emplacement SIM permet de prédire l'existence de cette méthode.
Si le nom de cette méthode ne correspond pas à celui donné par le fabricant de l'appareil, cela ne fonctionnera pas. Vous devez trouver le nom de méthode correspondant à ces appareils.
La recherche de noms de méthodes pour d'autres fabricants peut être effectuée à l'aide de la réflexion Java comme suit:
ÉDITER :
Comme Seetha l'a souligné dans son commentaire:
Cela fonctionne pour elle. Elle a réussi à obtenir deux numéros IMEI pour la carte SIM de l'appareil Samsung Duos.
Ajouter
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
MODIFIER 2:
La méthode utilisée pour récupérer les données est pour Lenovo A319 et d'autres téléphones de ce fabricant (Crédit Maher Abuthraa ):
la source
com.android.internal.telephony.RILConstants$SimCardID
interne. J'ai même essayé de créer cette classe avec la même signature de méthodes et les mêmes noms de variables. Mais pas de chance. Essayera d'obtenir le code source et essaiera de vérifier. Merci.J'ai un appareil Samsung Duos avec Android 4.4.4 et la méthode suggérée par Seetha dans la réponse acceptée (c'est-à-dire appeler getDeviceIdDs) ne fonctionne pas pour moi, car la méthode n'existe pas. J'ai pu récupérer toutes les informations dont j'avais besoin en appelant la méthode "getDefault (int slotID)", comme indiqué ci-dessous:
En outre, j'ai réécrit le code qui teste de manière itérative des méthodes pour récupérer ces informations afin qu'il utilise un tableau de noms de méthodes au lieu d'une séquence de try / catch. Par exemple, pour déterminer si nous avons deux cartes SIM actives, nous pourrions faire:
De cette façon, si un nouveau nom de méthode est suggéré pour un périphérique, vous pouvez simplement l'ajouter au tableau et cela devrait fonctionner.
la source
J'ai trouvé plusieurs solutions natives en cherchant le moyen de vérifier l'opérateur réseau.
Pour l'API> = 17:
Dans AndroidManifest, ajoutez l'autorisation:
Pour obtenir un opérateur réseau, vous pouvez vérifier les codes mcc et mnc:
Pour l'API> = 22:
Pour API> = 23. Pour simplement vérifier si le téléphone est double / triple / plusieurs sim:
la source
Je suis capable de lire les deux IMEI à partir du téléphone OnePlus 2
la source
Je regardais les journaux d'appels et j'ai remarqué qu'en dehors des champs habituels dans le contenu de managedCursor, nous avons une colonne "simid" dans les téléphones Dual SIM (j'ai vérifié sur Xolo A500s Lite), afin de marquer chaque appel dans le journal des appels avec une carte SIM. Cette valeur est 1 ou 2, indiquant très probablement SIM1 / SIM2.
Je n'ai pas trouvé cette colonne dans un seul téléphone SIM (j'ai vérifié sur Xperia L).
Donc, même si je ne pense pas que ce soit un moyen infaillible de vérifier la nature de la double SIM, je le publie ici car cela pourrait être utile à quelqu'un.
la source
Conseils:
Vous pouvez essayer d'utiliser
ctx.getSystemService("phone_msim")
au lieu de
ctx.getSystemService(Context.TELEPHONY_SERVICE)
Si vous avez déjà essayé la réponse de Vaibhav et que vous échouez, voici
telephony.getClass().getMethod()
ce qui fonctionne pour mon mobile Qualcomm .la source
J'ai trouvé ces propriétés système sur Samsung S8
Aussi, selon la source: https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/com/android/internal/telephony/TelephonyProperties.java
getprop persist.radio.multisim.config
renvoie "dsds
" ou "dsda
" sur multi sim.J'ai testé cela sur Samsung S8 et cela fonctionne
la source
Commonsware dit que ce n'est pas possible. Veuillez consulter ce qui suit:
La détection de la double SIM à l'aide du SDK Android n'est pas possible.
Voici un dialogue supplémentaire sur le sujet:
Le responsable de l'équipe de développement de Google dit que la détection de la double SIM à l'aide du SDK Android n'est pas possible.
la source