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)?

Alireza Noorali
la source
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.

dgp
la source
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é.

droidev
la source
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