Détection de la SimCard cible de l'appel entrant dans les appareils Multi-Sim


10

J'ai lu beaucoup de messages et essayé de nombreuses solutions, mais le point commun de tous les messages était qu'ils étaient tous obsolètes et au moins je ne pouvais pas trouver de solution qui fonctionnerait sur les nouvelles versions d'Android.

Post 1 , résultat: intent.getExtras().getInt("simId", -1)renvoie toujours -1

Post 2 , résultat: intent.getExtras().getInt("slot", -1)renvoie toujours -1

Post 3 , résultat:

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

Journaux:

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

il affiche les mêmes journaux avec la même valeur 0 pour la première SimCard et la seconde SimCard.

J'ai également essayé d'autres articles similaires. Aucun n'a fonctionné sur les nouvelles versions d'Android!

Existe-t-il une autre solution qui fonctionne sur les nouvelles versions d'Android (7.0 ou supérieur)?


intent.getExtras().getInt("item")<- Ne devriez-vous pas utiliser itemplutôt que "item"?
Michael

En outre, vous avez essayé d' imprimer tous les extras que l'intention ne contiennent, pour voir s'il y a une différence dans la dénomination par rapport à ce que vous êtes en supposant?
Michael

il retourne toujours 0 que ce soit avec "item" ou item.
Alireza Noorali

Eh bien, "item"c'est presque certainement incorrect dans ce contexte. Comme je l'ai dit, essayez d'imprimer ce que vous avez plutôt que ce que vous attendez. Bien que toute cette solution ressemble à un peu de piratage, toute clé utilisable que vous trouvez peut ne pas fonctionner sur certains appareils.
Michael

Réponses:


1

Officiellement, la seule valeur documentée fournie par l'intention est le numéro de téléphone.

Certains constructeurs ajoutent d'autres valeurs comme le numéro d'emplacement SIM dans l'intention, mais ce n'est pas obligatoire. C'est pourquoi il y a autant de noms de clés de slot possibles, comme ceux présentés dans le post 3 , chaque constructeur ajoutant sa propre implémentation.

Il est également possible qu'un constructeur n'ait pas ajouté cette valeur dans certains modèles, et c'est certainement le cas sur votre modèle. Il n'y a aucun moyen de trouver cette valeur si le constructeur ne la fournit pas.


Parce que la réponse est simplement une explication, je ne peux ni l'approuver ni la rejeter définitivement. Mais il s'avère que la réponse est logique.
Alireza Noorali

2

Si vous avez fait cela, cela devrait fonctionner. assurez-vous que votre appareil de test fonctionne sur Android 5.1 ou supérieur. le support dual sim est ajouté dans la version 5.1 ( cliquez ici )

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

Assurez-vous d'avoir ajouté l'autorisation ci-dessous dans le manifeste

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

REMARQUE :

Ces valeurs n'ont pas besoin de venir tout le temps. l'assistance d'un fournisseur de réseau est requise. Veuillez lire la documentation ici

Identifiant de l'opérateur de l'abonnement en cours. Renvoyez UNKNOWN_CARRIER_ID si l'abonnement n'est pas disponible ou si le transporteur ne peut pas être identifié.


1
J'ai déjà ajouté la READ_PHONE_STATEpermission mais j'obtiens toujourscallingSIM = -1
Alireza Noorali

@AlirezaNoorali quel appareil vous utilisez pour tester. et vous le faites fonctionner sous les appareils Android 7?
droidev

l'appareil est le Samsung Galaxy S6 Android 7.0. Je ne suis pas sûr des appareils Android 7 ci-dessous
Alireza Noorali

pouvez-vous récupérer les simIds normalement? quand vous n'êtes pas de garde
droidev
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.