Przeczytałem wiele postów i wypróbowałem wiele rozwiązań, ale wspólnym punktem wszystkich postów było to, że wszystkie były przestarzałe i przynajmniej nie mogłem znaleźć rozwiązania, które działałoby na nowszych wersjach Androida.
Post 1 , Wynik:
intent.getExtras().getInt("simId", -1)
zawsze zwraca -1
Po 2 , Wynik: intent.getExtras().getInt("slot", -1)
zawsze zwraca -1
Post 3 , Wynik:
String[] array = new String[]{
"extra_asus_dial_use_dualsim",
"com.android.phone.extra.slot",
"slot",
"simslot",
"sim_slot",
"subscription",
"Subscription",
"phone",
"com.android.phone.DialingMode",
"simSlot",
"slot_id",
"simId",
"simnum",
"phone_type",
"slotId",
"slotIdx"
};
for (String item :
array) {
Log.i(TAG, "Sim Card - " + item + " -----> " + intent.getExtras().getInt(item));
}
Dzienniki:
PhoneCallReceiver: Sim Card - extra_asus_dial_use_dualsim -----> 0
PhoneCallReceiver: Sim Card - com.android.phone.extra.slot -----> 0
PhoneCallReceiver: Sim Card - slot -----> 0
PhoneCallReceiver: Sim Card - simslot -----> 0
PhoneCallReceiver: Sim Card - sim_slot -----> 0
PhoneCallReceiver: Sim Card - subscription -----> 0
PhoneCallReceiver: Sim Card - Subscription -----> 0
PhoneCallReceiver: Sim Card - phone -----> 0
PhoneCallReceiver: Sim Card - com.android.phone.DialingMode -----> 0
PhoneCallReceiver: Sim Card - simSlot -----> 0
PhoneCallReceiver: Sim Card - slot_id -----> 0
PhoneCallReceiver: Sim Card - simId -----> 0
PhoneCallReceiver: Sim Card - simnum -----> 0
PhoneCallReceiver: Sim Card - phone_type -----> 0
PhoneCallReceiver: Sim Card - slotId -----> 0
PhoneCallReceiver: Sim Card - slotIdx -----> 0
wyświetla te same logi o tej samej wartości 0 dla pierwszej karty SIM i drugiej karty SIM.
Próbowałem także innych podobnych postów. Żadne nie działało na nowych wersjach Androida!
Czy istnieje inne rozwiązanie, które działa na nowszych wersjach Androida (7.0 lub nowszy)?
java
android
broadcastreceiver
dual-sim
incoming-call
Alireza Noorali
źródło
źródło
intent.getExtras().getInt("item")
<- Nie powinieneś używaćitem
zamiast"item"
?"item"
jest prawie na pewno niepoprawny w tym kontekście. Tak jak powiedziałem, spróbuj wydrukować to, co masz, a nie to, czego oczekujesz. Chociaż całe to rozwiązanie wygląda trochę jak włamanie, więc każdy użyteczny klucz, który znajdziesz, może nadal nie działać na niektórych urządzeniach.Odpowiedzi:
Oficjalnie jedyną udokumentowaną wartością podaną przez intencję jest numer telefonu.
Niektórzy konstruktorzy dodają w zamian inne wartości, takie jak numer gniazda karty SIM, ale nie jest to obowiązkowe. Właśnie dlatego istnieje tak wiele nazw kluczy gniazd, jak te przedstawione w poście 3 , a każdy konstruktor dodaje własną implementację.
Możliwe jest również, że jakiś konstruktor nie dodał tej wartości w niektórych modelach, a na pewno tak jest w przypadku twojego modelu. Nie ma możliwości znalezienia tej wartości, jeśli konstruktor jej nie dostarczy.
źródło
Jeśli zrobiłeś tak, to powinno działać. upewnij się, że Twoje urządzenie testujące działa na systemie Android 5.1 lub nowszym. obsługa podwójnej karty SIM została dodana w wersji 5.1 (sprawdź tutaj )
Upewnij się, że dodałeś poniższe zezwolenie w manifeście
UWAGA :
Wartości te nie muszą pojawiać się cały czas. wymagana jest obsługa dostawcy sieci. Przeczytaj dokumentację tutaj
źródło
READ_PHONE_STATE
pozwolenie, ale zawsze dostajęcallingSIM = -1