1 votes

Où puis-je trouver la liste des réseaux considérés comme ne roaming pas ?

Il y a quelque temps, à l'époque de CyanogenMod, je suis tombé sur une liste de combinaisons de réseau qui n'étaient pas considérées comme étant en itinérance.

En général, Android regarde le MCC et le MNC de la carte SIM et les compare à ceux du réseau actuel. S'ils ne correspondent pas, Android se considère en itinérance. L'icône de la barre d'état le signale, et des options comme la désactivation des données en itinérance sont activées.

La liste contourne ce comportement en spécifiant des combinaisons de paires MCC/MNC qui ne sont pas considérées comme étant en itinérance. Par exemple, O2 Allemagne (262-07) a racheté son rival E-Plus (262-03) il y a quelques années. Au début, les antennes relais utilisaient toujours le MCC/MNC de l'opérateur d'origine, mais les clients pouvaient passer d'un réseau à l'autre sans frais supplémentaires. Pour des cas comme celui-ci, la liste aurait eu une règle du type "si la carte SIM a le code 262-07, considérez le réseau 262-03 comme le réseau domestique, pas comme un réseau en itinérance" (et une autre pour le cas inverse d'une carte E-Plus utilisée sur une antenne O2).

Cette liste se trouve quelque part dans le code source et n'est pas accessible via les paramètres. Malheureusement, je ne sais pas où la trouver (et si elle a déjà fait partie de l'AOSP ou a été ajoutée par Cyanogenmod).

Est-ce que quelqu'un sait où se trouve cette liste?

1 votes

Une question intéressante. Êtes-vous sûr que la décision de considérer un réseau comme étant en itinérance ou non n'est pas prise par la carte SIM ? D'après mes connaissances, ce serait le point où je m'attendrais à une telle fonctionnalité.

0 votes

Comme Robert, je m'attends plutôt à ce que cela se fasse avec la configuration SIM - ou comme un "signal de retour" de la tour cellulaire (en reprenant votre exemple : si vous aviez un 262-03 et que vous vous connectiez à une tour 262-07, la tour ne définirait pas le "drapeau d'itinérance" dans sa réponse). Comment me suis-je fait cette idée ? Eh bien, j'ai encore des 262-03 dans certains de mes appareils. Je n'ai pas effectué de mise à jour du système lors de la fusion. Je pourrais me connecter à 262-07 et ne me rappeler d'avoir vu un R. Mais étant donné mon grand âge, j'aurais pu simplement oublier, bien sûr :D

0 votes

@Robert Je suis assez sûr qu'il y avait quelque chose lié aux réseaux d'itinérance dans les journaux de modifications de Cyanogenmod à un moment donné. Je doute que cette décision soit prise par la carte SIM seule : comment une vieille SIM (disons, émise vers 2000) pourrait-elle savoir qu'une fusion a eu lieu une décennie et demie plus tard?

4voto

vjsantojaca Points 207

La décision de savoir si une carte SIM est connectée à un réseau d'itinérance (un réseau d'un autre pays, par exemple) est prise par le framework avec les informations obtenues sur ce réseau. Tout d'abord, nous devons savoir qu'il y a deux types :

  • Itinérance nationale -> Un réseau du même pays (même MCC) que la SIM mais qui est d'un autre opérateur (MNC différent).
  • Itinérance internationale -> Un réseau d'un autre pays (MCC différent)

Beaucoup d'OEM (BQ, Samsung, Xiaomi...) considèrent l'itinérance nationale comme n'étant pas de l'itinérance parce que, par exemple, tous les MVNO utilisent l'itinérance nationale.

Par défaut, AOSP a une manière d'ajouter des réseaux pour qu'ils soient toujours considérés en itinérance (ainsi que d'ajouter des réseaux qui ne seront jamais considérés en itinérance)

Pour AOSP, cela fonctionne comme suit :


Dans ServiceStateTracker.java de framework/opt/telephony:

/**
 * Ne pas définir l'état d'itinérance en cas d'opérateurs considérés comme non itinérants.
 *
 * Peut utiliser mcc ou mcc+mnc comme élément de
 * {@link CarrierConfigManager#KEY_NON_ROAMING_OPERATOR_STRING_ARRAY}.
 * Par exemple, 302 ou 21407. Si mcc ou mcc+mnc correspondent à l'opérateur,
 * ne pas définir l'état d'itinérance.
 *
 * @param s ServiceState conserve les ons actuels
 * @return false pour définir l'état en itinérance
 */
private boolean isOperatorConsideredNonRoaming(ServiceState s) {
    String operatorNumeric = s.getOperatorNumeric();
    PersistableBundle config = getCarrierConfig();
    String[] numericArray = config.getStringArray(
            CarrierConfigManager.KEY_NON_ROAMING_OPERATOR_STRING_ARRAY);
    if (ArrayUtils.isEmpty(numericArray) || operatorNumeric == null) {
        return false;
    }
    for (String numeric : numericArray) {
        if (!TextUtils.isEmpty(numeric) && operatorNumeric.startsWith(numeric)) {
            return true;
        }
    }
    return false;
}

et de la même manière :

private boolean isOperatorConsideredRoaming(ServiceState s) {
    String operatorNumeric = s.getOperatorNumeric();
    PersistableBundle config = getCarrierConfig();
    String[] numericArray = config.getStringArray(
            CarrierConfigManager.KEY_ROAMING_OPERATOR_STRING_ARRAY);
    if (ArrayUtils.isEmpty(numericArray) || operatorNumeric == null) {
        return false;
    }
    for (String numeric : numericArray) {
        if (!TextUtils.isEmpty(numeric) && operatorNumeric.startsWith(numeric)) {
            return true;
        }
    }
    return false;
}

Si nous recherchons des informations sur KEY_ROAMING_OPERATOR_STRING_ARRAY et KEY_NON_ROAMING_OPERATOR_STRING_ARRAY dans Android Developers nous trouvons que entrer une description de l'image ici

Vous pourriez donc ajouter dans le carrier_config_21407 (Movistar Espagne) une liste de réseaux en itinérance et non en itinérance :

       //par exemple, LycaMobile Portugal

Les fichiers de configuration du fournisseur sont situés dans platform/packages/apps/CarrierConfig. Il existe deux formats possibles :

0 votes

Merci, c'est exactement ce que je cherchais! Savez-vous quelque chose sur les implications d'ajouter un réseau aux listes de "not roaming"? Voir android.stackexchange.com/questions/231290/…

0 votes

Laisse moi vérifier @user149408

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X