Po wielu poszukiwaniach na forach wiem, że nie ma sposobu, aby znaleźć numer seryjny IMSI lub SIM dla obu kart SIM w telefonie dual SIM (poza kontaktem z producentem). Teraz moje zmienione pytanie brzmi: czy w ogóle możemy wykryć, że telefon ma dwie karty SIM? Uważam, że można to wykryć za pomocą pewnej inteligencji. Kilka sposobów, które przychodzą mi do głowy, to:
Wybieranie kodu USSD i śledzenie dzienników dla numeru IMEI (próbowałem tego z * 139 # w Indiach. Udało się.) To da mi numer IMEI dla karty SIM, z której wybrałem kod USSD. (Zakłada się, że telefon jest zgodny z wytycznymi Androida i ma dwa numery IMEI).
Przechowywanie numeru seryjnego karty SIM i / lub IMSI dla karty SIM. I po wykryciu dowolnego innego numeru IMSI / seryjnego, nawet jeśli telefon nie został ponownie uruchomiony (tj. Została przełączona karta SIM), przez śledzenie niektórych dzienników lub obsługę zdarzenia transmisji.
Wybierając * 06 # zobaczysz oba numery IMEI. W jakiś sposób zdobądź te dwie liczby. (Coś w rodzaju przechwytywania ekranu i analizowania obrazu pod kątem tekstu).
Jeśli ktoś może wymyślić inne sposoby, jest mile widziany. Byłbym naprawdę wdzięczny za jakąkolwiek pomoc w tej sprawie. Ponadto, jeśli ktoś ma jakiekolwiek informacje na temat interfejsów API producentów lub łącza umożliwiające skontaktowanie się z nimi, prosimy o udostępnienie ich społeczności.
Odpowiedzi:
Aktualizacja 23 marca 2015:
Inna możliwa opcja:
Możesz użyć odbicia Java, aby uzyskać oba numery IMEI.
Korzystając z tych numerów IMEI możesz sprawdzić, czy telefon to DUAL SIM, czy nie.
Spróbuj wykonać następujące czynności:
A oto
TelephonyInfo.java
:Edytować :
Uzyskanie dostępu do metod takich jak „getDeviceIdGemini” dla szczegółów innego gniazda SIM zakłada, że metoda istnieje.
Jeśli nazwa tej metody nie zgadza się z nazwą podaną przez producenta urządzenia, to nie zadziała. Musisz znaleźć odpowiednią nazwę metody dla tych urządzeń.
Znajdowanie nazw metod dla innych producentów można wykonać za pomocą refleksji w języku Java w następujący sposób:
EDYTOWAĆ :
Jak zauważyła Seetha w swoim komentarzu:
To dla niej działa. Udało jej się uzyskać dwa numery IMEI dla obu kart SIM w urządzeniu Samsung Duos.
Dodaj
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
EDYCJA 2:
Metoda pobierania danych dotyczy telefonów Lenovo A319 i innych telefonów tego producenta (Credit Maher Abuthraa ):
źródło
com.android.internal.telephony.RILConstants$SimCardID
wewnętrznie. Próbowałem nawet stworzyć tę klasę z tą samą sygnaturą metod i tymi samymi nazwami zmiennych. Ale bez szczęścia. Spróbuje uzyskać kod źródłowy i spróbuje sprawdzić. Dzięki.Mam urządzenie Samsung Duos z Androidem 4.4.4 i metoda zasugerowana przez Seethę w zaakceptowanej odpowiedzi (np. Wywołanie getDeviceIdDs) u mnie nie działa, ponieważ metoda nie istnieje. Udało mi się odzyskać wszystkie potrzebne informacje, wywołując metodę „getDefault (int slotID)”, jak pokazano poniżej:
Ponadto przepisałem kod, który iteracyjnie testuje metody odzyskiwania tych informacji, tak aby używał tablicy nazw metod zamiast sekwencji try / catch. Na przykład, aby ustalić, czy mamy dwie aktywne karty SIM, możemy zrobić:
W ten sposób, jeśli dla jakiegoś urządzenia jest sugerowana nowa nazwa metody, możesz po prostu dodać ją do tablicy i powinno działać.
źródło
Istnieje kilka rozwiązań natywnych, które znalazłem, szukając sposobu na sprawdzenie operatora sieci.
Dla API> = 17:
W AndroidManifest dodaj uprawnienia:
Aby uzyskać operatora sieci, możesz sprawdzić kody mcc i mnc:
Dla API> = 22:
Dla API> = 23. Aby tylko sprawdzić, czy telefon jest podwójny / potrójny / wiele kart SIM:
źródło
Jestem w stanie odczytać oba IMEI z telefonu OnePlus 2
źródło
Przeglądałem dzienniki połączeń i zauważyłem, że poza zwykłymi polami w treści managedCursor, w telefonach Dual SIM mamy kolumnę "simid" (sprawdziłem na Xolo A500s Lite), żeby otagować każde połączenie w rejestrze połączeń za pomocą karty SIM. Ta wartość to 1 lub 2, najprawdopodobniej oznaczająca SIM1 / SIM2.
Nie znalazłem tej kolumny w jednym telefonie SIM (sprawdzałem na Xperii L).
Więc chociaż nie uważam, że jest to niezawodny sposób sprawdzenia natury podwójnej karty SIM, zamieszczam go tutaj, ponieważ może to być przydatne dla kogoś.
źródło
Porady:
Możesz spróbować użyć
ctx.getSystemService("phone_msim")
zamiast
ctx.getSystemService(Context.TELEPHONY_SERVICE)
Jeśli już wypróbowałeś odpowiedź Vaibhav i się
telephony.getClass().getMethod()
nie udało , powyżej opisano, co działa na moim telefonie Qualcomm .źródło
Znalazłem te właściwości systemu na Samsungu S8
Ponadto według źródła: https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/com/android/internal/telephony/TelephonyProperties.java
getprop persist.radio.multisim.config
zwraca „dsds
” lub „dsda
” na wielu kartach SIM.Przetestowałem to na Samsungu S8 i działa
źródło
Commonsware twierdzi, że nie jest to możliwe. Zobacz następujące informacje:
Wykrywanie Dual SIM za pomocą Android SDK nie jest możliwe.
Oto dalszy dialog na ten temat:
Facet z zespołu programistów Google mówi, że wykrycie Dual SIM za pomocą Android SDK nie jest możliwe.
źródło