Я прочитал много постов и перепробовал множество решений, но общая черта всех постов заключалась в том, что все они устарели, и, по крайней мере, я не смог найти решение, которое бы работало на более новых версиях Android.
Пост 1 , Результат:
intent.getExtras().getInt("simId", -1)
всегда возвращает -1
Пост 2 , Результат: intent.getExtras().getInt("slot", -1)
всегда возвращает -1
Пост 3 , Результат:
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));
}
Журналы:
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
он отображает одинаковые логи с одинаковым значением 0 для первой SimCard и второй SimCard.
Я также пробовал другие подобные посты. Никто не работал на новых версиях Android!
Есть ли другое решение, которое работает на более новых версиях Android (7.0 или выше)?
java
android
broadcastreceiver
dual-sim
incoming-call
Алиреза Нурали
источник
источник
intent.getExtras().getInt("item")
<- Разве вы не должны использовать,item
а не"item"
?"item"
почти наверняка неверно в этом контексте. Как я уже сказал, попробуйте напечатать то, что у вас есть, а не то, что вы ожидаете. Хотя все это решение выглядит как хакерский, любой найденный вами полезный ключ все еще может не работать на некоторых устройствах.Ответы:
Официально единственной документированной ценностью, предоставленной намерением, является номер телефона.
Некоторые конструкторы добавляют другие значения, например номер слота sim, в намерение, но это не обязательно. Вот почему существует так много имен ключей слотов, как те, что представлены в посте 3 , каждый конструктор добавляет свою собственную реализацию.
Также возможно, что какой-то конструктор не добавил это значение в некоторых моделях, и это, безусловно, относится к вашей модели. Нет способа найти это значение, если конструктор его не доставляет.
источник
Если вы сделали так, это должно работать. убедитесь, что ваше тестовое устройство работает на Android 5.1 или выше. Поддержка двух симов добавлена в v 5.1 (проверьте здесь )
Убедитесь, что вы добавили приведенное ниже разрешение в манифест
НОТА :
Эти ценности не должны прийти все время. Требуется поддержка провайдера сети. Пожалуйста, прочитайте документацию здесь
источник
READ_PHONE_STATE
разрешение, но всегда получаюcallingSIM = -1