Rilevamento della SimCard target della chiamata in arrivo nei dispositivi Multi-Sim


10

Ho letto molti post e provato molte soluzioni, ma il punto comune di tutti i post era che erano tutti obsoleti e almeno non riuscivo a trovare una soluzione che funzionasse con le versioni più recenti di Android.

Post 1 , Risultato: intent.getExtras().getInt("simId", -1)restituisce sempre -1

Post 2 , Risultato: intent.getExtras().getInt("slot", -1)restituisce sempre -1

Post 3 , Risultato:

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));
}

logs:

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

visualizza gli stessi registri con lo stesso valore 0 per la prima SimCard e la seconda SimCard.

Ho anche provato altri post simili. Nessuno ha funzionato su nuove versioni di Android!

Esiste un'altra soluzione che funziona con le versioni più recenti di Android (7.0 o successive)?


intent.getExtras().getInt("item")<- Non dovresti usare itempiuttosto che "item"?
Michael

Inoltre, hai provato la stampa di tutti gli extra che l'intento fa contengono, per vedere se c'è una differenza nella denominazione rispetto a quello che si sta assumendo?
Michael

restituisce sempre 0 se con "item" o item.
Alireza Noorali,

Bene, "item"è quasi certamente errato in questo contesto. Come ho detto, prova a stampare quello che hai e non quello che ti aspetti. Anche se l'intera soluzione sembra un po 'un trucco, quindi qualsiasi chiave utilizzabile che potresti trovare potrebbe non funzionare su alcuni dispositivi.
Michael

Risposte:


1

Ufficialmente, l'unico valore documentato fornito dall'intento è il numero di telefono.

Alcuni costruttori aggiungono altri valori come il numero di slot sim nell'intento, ma questo non è obbligatorio. Questo è il motivo per cui ci sono così tanti nomi di chiavi slot possibili, come quelli presentati nel post 3 , ogni costruttore aggiunge la propria implementazione.

È anche possibile che alcuni costruttori non abbiano aggiunto questo valore in alcuni modelli, e questo è certamente il caso del tuo modello. Non è possibile trovare questo valore se il costruttore non lo fornisce.


Poiché la risposta è semplicemente una spiegazione, non posso approvarla o respingerla definitivamente. Ma a quanto pare, la risposta è logica.
Alireza Noorali,

2

Se hai fatto così dovrebbe funzionare. assicurati che il tuo dispositivo di test funzioni su Android 5.1 o versioni successive. il supporto dual sim è stato aggiunto in v 5.1 (Controlla qui )

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
        }
    }
}

Assicurati di aver aggiunto l'autorizzazione di seguito in manifest

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

NOTA :

Questi valori non devono venire sempre. È richiesto il supporto del provider di rete. Leggere qui la documentazione

ID gestore dell'abbonamento corrente. Restituisci UNKNOWN_CARRIER_ID se l'abbonamento non è disponibile o il corriere non può essere identificato.


1
Ho già aggiunto il READ_PHONE_STATEpermesso ma ottengo semprecallingSIM = -1
Alireza Noorali il

@AlirezaNoorali quale dispositivo stai usando per testare. e lo stai facendo funzionare sotto i dispositivi Android 7?
droidev,

il dispositivo è Samsung Galaxy S6 Android 7.0. Non sono sicuro di sotto i dispositivi Android 7
Alireza Noorali

sei in grado di recuperare simIdi normalmente? quando non sei in servizio
droidev il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.