Erkennen der Ziel-SimCard eines eingehenden Anrufs in Multi-Sim-Geräten


10

Ich habe viele Beiträge gelesen und viele Lösungen ausprobiert, aber der gemeinsame Punkt aller Beiträge war, dass sie alle veraltet waren und ich zumindest keine Lösung finden konnte, die auf neueren Versionen von Android funktioniert.

Beitrag 1 , Ergebnis: Gibt intent.getExtras().getInt("simId", -1)immer -1 zurück

Beitrag 2 , Ergebnis: Gibt intent.getExtras().getInt("slot", -1)immer -1 zurück

Beitrag 3 , Ergebnis:

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

Protokolle:

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

Es werden dieselben Protokolle mit demselben Wert 0 für die erste SimCard und die zweite SimCard angezeigt.

Ich habe auch andere ähnliche Beiträge ausprobiert. Keiner hat an neuen Versionen von Android gearbeitet!

Gibt es eine andere Lösung, die auf neueren Versionen von Android (7.0 oder höher) funktioniert?


intent.getExtras().getInt("item")<- Solltest du nicht itemlieber verwenden als "item"?
Michael

Außerdem haben Sie versucht , alle Extras , Drucken , dass die Absicht nicht enthalten, um zu sehen , ob es einen Unterschied ist bei der Benennung im Vergleich zu dem, was Sie gehen davon aus ?
Michael

es wird immer 0 zurückgegeben, egal ob mit "item" oder item.
Alireza Noorali

Nun, "item"ist in diesem Zusammenhang mit ziemlicher Sicherheit falsch. Versuchen Sie, wie gesagt, zu drucken, was Sie haben, anstatt was Sie erwarten. Obwohl diese ganze Lösung wie ein Hack aussieht, funktioniert jeder verwendbare Schlüssel, den Sie finden, auf einigen Geräten möglicherweise immer noch nicht.
Michael

Antworten:


1

Offiziell ist der einzige dokumentierte Wert, den die Absicht liefert, die Telefonnummer.

Einige Konstruktoren fügen der Absicht andere Werte wie die Sim-Slot-Nummer hinzu, dies ist jedoch nicht obligatorisch. Aus diesem Grund sind so viele Slot-Keys-Namen möglich, wie in Post 3 dargestellt , wobei jeder Konstruktor seine eigene Implementierung hinzufügt.

Es ist auch möglich, dass ein Konstruktor diesen Wert in einigen Modellen nicht hinzugefügt hat, und dies ist sicherlich bei Ihrem Modell der Fall. Es gibt keine Möglichkeit, diesen Wert zu finden, wenn der Konstruktor ihn nicht liefert.


Da die Antwort lediglich eine Erklärung ist, kann ich sie nicht definitiv genehmigen oder ablehnen. Aber wie sich herausstellt, ist die Antwort logisch.
Alireza Noorali

2

Wenn Sie dies getan haben, sollte es funktionieren. Stellen Sie sicher, dass Ihr Testgerät unter Android 5.1 oder höher ausgeführt wird. Dual-Sim-Unterstützung wurde in Version 5.1 hinzugefügt ( hier überprüfen )

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

Stellen Sie sicher, dass Sie die folgende Berechtigung im Manifest hinzugefügt haben

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

HINWEIS :

Diese Werte müssen nicht immer kommen. Unterstützung durch Netzwerkanbieter ist erforderlich. Bitte lesen Sie die Dokumentation hier

Träger-ID des aktuellen Abonnements. Geben Sie UNKNOWN_CARRIER_ID zurück, wenn das Abonnement nicht verfügbar ist oder der Netzbetreiber nicht identifiziert werden kann.


1
Ich habe bereits die READ_PHONE_STATEErlaubnis hinzugefügt , aber ich bekomme immercallingSIM = -1
Alireza Noorali

@AlirezaNoorali welches Gerät Sie zum Testen verwenden. und Sie bringen es unter Android 7-Geräten zum Laufen?
Droidev

Das Gerät ist Samsung Galaxy S6 Android 7.0. Ich bin nicht sicher über unter Android 7 Geräte
Alireza Noorali

können sie simIds normal abrufen? wenn Sie nicht auf Abruf sind
droidev
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.