Визначення цільової SimCard вхідного дзвінка на пристроях Multi-Sim


10

Я прочитав багато публікацій і спробував багато рішень, але загальним моментом усіх публікацій було те, що всі вони застаріли і, принаймні, я не міг знайти рішення, яке б працювало на новіших версіях 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 або новіших версій)?


intent.getExtras().getInt("item")<- Чи не варто використовувати ви, itemа не "item"?
Михайло

Крім того , ви пробували друкувати всі додаткові послуги , що Намір робить містить, щоб побачити , якщо є різниця в позначенні по порівнянні з тим, що Ви припускаєте?
Михайло

він завжди повертає 0, будь то "елемент" або пункт.
Аліреза Нооралі

Ну, "item"майже напевно некоректно в цьому контексті. Як я вже сказав, спробуйте надрукувати те, що у вас є, а не те, що ви очікуєте. Незважаючи на те, що все це рішення схоже на злом, тому будь-який корисний ключ, який ви знайдете, все ще може не працювати на деяких пристроях.
Михайло

Відповіді:


1

Офіційно єдине документально підтверджене значення, яке надається наміром, - це номер телефону.

Деякі конструктори додають інші значення, такі як номер слота sim, у намірі, але це не є обов'язковим. Ось чому можливе так багато імен ключів слотів, таких як представлені у публікації 3 , кожен конструктор додає власну реалізацію.

Можливо також, що деякий конструктор не додав цього значення в деяких моделях, і це, безумовно, має місце у вашій моделі. Немає способу знайти це значення, якщо конструктор не доставить його.


Оскільки відповідь - це просто пояснення, я не можу остаточно її затвердити чи відкинути. Але як виявляється, відповідь логічна.
Аліреза Нооралі

2

Якщо ви зробили так, це повинно працювати. переконайтеся, що ваш тестовий пристрій працює на Android 5.1 або новішої версії. у версії 5.1 додано подвійну підтримку SIM (Перевірте тут )

public class IncomingCallInterceptor extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
    String callingSIM = "";
    Bundle bundle = intent.getExtras();
    callingSIM = String.valueOf(bundle.getInt("simId", -1));

    if(callingSIM.equals("0")){
           // Incoming call from SIM1
        } else if(callingSIM.equals("1")){
           // Incoming call from SIM2
        }
    }
}

Переконайтеся, що ви додали нижче дозволу в маніфесті

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

ПРИМІТКА :

Ці значення не повинні приходити постійно. необхідна підтримка мережевого провайдера. Прочитайте тут документацію

Ідентифікатор носія поточної підписки. Поверніть UNKNOWN_CARRIER_ID, якщо підписка недоступна або оператор не може бути ідентифікований.


1
Я вже додав READ_PHONE_STATEдозвіл, але завжди отримуюcallingSIM = -1
Аліреза Нооралі

@AlirezaNoorali, який пристрій ви використовуєте для тестування. а ви працюєте на пристроях нижче Android 7?
droidev

пристрій - Samsung Galaxy S6 Android 7.0. Я не впевнений про пристрої Android 7 нижче
Alireza Noorali

чи можете ви нормально отримати simIds? коли ви не за викликом
droidev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.