Nach vielen Recherchen in Foren weiß ich jetzt, dass es keine Möglichkeit gibt, die IMSI- oder SIM-Seriennummer für beide SIM-Karten in einem Dual-SIM-Telefon zu finden (außer bei der Kontaktaufnahme mit dem Hersteller). Meine geänderte Frage lautet nun: Können wir überhaupt feststellen, dass das Telefon zwei SIM-Karten hat? Ich glaube, dass es mit etwas Intelligenz entdeckt werden kann. Ich kann mir nur wenige Möglichkeiten vorstellen:
Wählen eines USSD-Codes und Verfolgen der Protokolle für die IMEI-Nummer (Ich habe dies mit * 139 # in Indien versucht. Es hat funktioniert.) Dadurch erhält ich die IMEI-Nummer für die SIM-Karte, von der aus ich den USSD-Code gewählt habe. (Es wird davon ausgegangen, dass das Telefon den Android-Richtlinien entspricht und zwei IMEI-Nummern hat.)
Speichern der SIM-Seriennummer und / oder der IMSI für die SIM. Und nach dem Erkennen einer anderen IMSI- / Seriennummer, auch wenn das Telefon nicht neu gestartet wurde (dh die SIM-Karte wurde umgeschaltet), indem einige Protokolle verfolgt oder ein Broadcast-Ereignis behandelt wurde.
Wenn Sie * 06 # wählen, werden beide IMEI-Nummern angezeigt. Erhalten Sie auf irgendeine Weise diese beiden Zahlen. (So etwas wie Bildschirmaufnahme und Bildanalyse für Text.)
Wenn sich jemand andere Möglichkeiten vorstellen kann, sind sie herzlich willkommen. Ich würde mich über jede Hilfe in dieser Hinsicht sehr freuen. Wenn jemand Informationen über Hersteller-APIs oder Links hat, um diese zu kontaktieren, teilen Sie diese bitte mit den Community-Leuten.
Antworten:
Update 23. März 15:
Andere mögliche Option:
Sie können Java Reflection verwenden , um beide IMEI-Nummern abzurufen.
Mit diesen IMEI-Nummern können Sie überprüfen, ob das Telefon eine DUAL SIM ist oder nicht.
Versuchen Sie folgende Aktivität:
Und hier ist
TelephonyInfo.java
:Bearbeiten:
Wenn Sie auf Methoden wie "getDeviceIdGemini" für die Details anderer SIM-Steckplätze zugreifen, wird vorausgesagt, dass diese Methode vorhanden ist.
Wenn der Name dieser Methode nicht mit dem Namen des Geräteherstellers übereinstimmt, funktioniert er nicht. Sie müssen den entsprechenden Methodennamen für diese Geräte finden.
Das Finden von Methodennamen für andere Hersteller kann mithilfe von Java Reflection wie folgt erfolgen:
EDIT:
Wie Seetha in ihrem Kommentar betonte:
Es funktioniert für sie. Es gelang ihr, zwei IMEI-Nummern für beide SIM-Karten im Samsung Duos-Gerät zu erhalten.
Hinzufügen
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
EDIT 2:
Die Methode zum Abrufen von Daten gilt für Lenovo A319 und andere Telefone dieses Herstellers (Credit Maher Abuthraa ):
quelle
com.android.internal.telephony.RILConstants$SimCardID
intern verwendet. Es wurde sogar versucht, diese Klasse mit derselben Methodensignatur und denselben Variablennamen zu erstellen. Aber kein Glück. Wird versuchen, den Quellcode zu erhalten und wird versuchen, dies zu überprüfen. Vielen Dank.Ich habe ein Samsung Duos-Gerät mit Android 4.4.4 und die von Seetha in der akzeptierten Antwort vorgeschlagene Methode (z. B. getDeviceIdDs aufrufen) funktioniert bei mir nicht, da die Methode nicht vorhanden ist. Ich konnte alle benötigten Informationen wiederherstellen, indem ich die Methode "getDefault (int slotID)" aufrief, wie unten gezeigt:
Außerdem habe ich den Code neu geschrieben, der iterativ nach Methoden zum Wiederherstellen dieser Informationen testet, sodass anstelle einer Folge von try / catch ein Array von Methodennamen verwendet wird. Um beispielsweise festzustellen, ob wir zwei aktive SIM-Karten haben, können wir Folgendes tun:
Auf diese Weise können Sie, wenn für ein Gerät ein neuer Methodenname vorgeschlagen wird, diesen einfach zum Array hinzufügen, und es sollte funktionieren.
quelle
Es gibt mehrere native Lösungen, die ich gefunden habe, als ich nach einer Möglichkeit gesucht habe, den Netzbetreiber zu überprüfen.
Für API> = 17:
Fügen Sie in AndroidManifest die Berechtigung hinzu:
Um den Netzbetreiber zu erhalten, können Sie die Codes mcc und mnc überprüfen:
Für API> = 22:
Für API> = 23. Um zu überprüfen, ob das Telefon Dual / Triple / Many Sim ist:
quelle
Ich kann beide IMEIs von OnePlus 2 Phone lesen
quelle
Ich habe mir die Anrufprotokolle angesehen und festgestellt, dass wir in Dual-SIM-Telefonen (ich habe Xolo A500s Lite überprüft) neben den üblichen Feldern im Inhalt von manageCursor eine Spalte "simid" haben, um jeden Anruf zu kennzeichnen im Anrufprotokoll mit einer SIM. Dieser Wert ist entweder 1 oder 2, was höchstwahrscheinlich SIM1 / SIM2 bedeutet.
Ich habe diese Spalte in keinem einzelnen SIM-Telefon gefunden (ich habe das Xperia L überprüft).
Obwohl ich nicht denke, dass dies eine narrensichere Möglichkeit ist, die Dual-SIM-Natur zu überprüfen, poste ich sie hier, weil sie für jemanden nützlich sein könnte.
quelle
Tipps:
Sie können versuchen, zu verwenden
ctx.getSystemService("phone_msim")
anstatt
ctx.getSystemService(Context.TELEPHONY_SERVICE)
Wenn Sie Vaibhavs Antwort bereits ausprobiert haben und
telephony.getClass().getMethod()
fehlschlagen, funktioniert dies oben für mein Qualcomm- Handy.quelle
Ich habe diese Systemeigenschaften auf Samsung S8 gefunden
Laut Quelle: https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/com/android/internal/telephony/TelephonyProperties.java
getprop persist.radio.multisim.config
gibt "dsds
" oder "dsda
" auf Multi-Sim zurück.Ich habe dies auf Samsung S8 getestet und es funktioniert
quelle
Commonsware sagt, dass dies nicht möglich ist. Bitte beachten Sie Folgendes:
Das Erkennen von Dual-SIM mit Android SDK ist nicht möglich.
Hier ist ein weiterer Dialog zum Thema:
Der Entwickler von Google sagt, dass das Erkennen von Dual-SIM-Karten mit dem Android SDK nicht möglich ist.
quelle