Google s'est engagé à promouvoir l'équité raciale pour les communautés noires. Regarde comment.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Configuration du transporteur

Android 6.0 et versions ultérieures incluent une capacité pour les applications privilégiées de fournir une configuration spécifique à l'opérateur sur la plate-forme. Cette fonctionnalité, basée sur les privilèges de transporteur UICC introduits dans Android 5.1 (Lollipop MR1), permet d'éloigner la configuration de l'opérateur des superpositions de configuration statique et donne aux opérateurs et aux OEM la possibilité de fournir dynamiquement la configuration de l'opérateur à la plate-forme via une interface définie.

Une application de transporteur correctement signée peut être préchargée dans l'image système, installée automatiquement ou installée manuellement via un magasin d'applications. L'application est interrogée par la plate-forme pour fournir la configuration des paramètres, notamment:

  • Réseaux itinérants / non itinérants
  • Messagerie vocale visuelle
  • Paramètres réseau SMS / MMS
  • Configurations VoLTE / IMS

La détermination des valeurs à renvoyer dépend entièrement de l'application de l'opérateur et peut être dynamique en fonction des informations détaillées transmises à l'application via la plate-forme.

Les principaux avantages de cette approche sont:

  • Configuration dynamique - Prise en charge de concepts tels que la configuration non dérivée de MCCMNC, par exemple, les opérateurs de réseau virtuel mobile (MVNO) ou le client optent pour des services supplémentaires.
  • Prise en charge des appareils vendus via n'importe quel canal - Par exemple, un téléphone open market peut être automatiquement configuré avec les bons paramètres en téléchargeant une application à partir d'un magasin d'applications.
  • Sécurité - Le privilège de fournir cette configuration n'est accordé qu'aux applications signées par l'opérateur.
  • API définie - Auparavant, cette configuration était stockée principalement dans des superpositions XML internes dans le cadre et non via une API publique. L'API de configuration de l'opérateur dans Android 6.0 est publique et bien définie.

Comment ça fonctionne

Chargement de la configuration

La configuration de l'opérateur fournie par cette fonctionnalité est un ensemble de paires clé-valeur qui modifient divers comportements liés à la téléphonie dans la plate-forme.

L'ensemble de valeurs pour un périphérique particulier est déterminé en interrogeant les composants suivants dans l'ordre:

  1. L'application de l'opérateur (cela est facultatif, mais c'est l'emplacement recommandé pour une configuration supplémentaire au-delà de ce qui existe dans le projet Open Source Android (AOSP))
  2. L'application de configuration de plate-forme fournie avec l'image système
  3. Valeurs par défaut, codées en dur dans le framework (équivalent au comportement antérieur à Android 6.0)

L'application de configuration de la plateforme

Une application de configuration de plate-forme générique est fournie avec l'image système. Cette application peut fournir des valeurs pour toutes les variables que l'application de l'opérateur standard ne fait pas. L'application de configuration de la plateforme se trouve (dans Android 6.0) dans: packages/apps/CarrierConfig

Le but de cette application est de fournir une configuration par réseau lorsqu'une application opérateur n'est pas installée, et les opérateurs / OEM ne devraient y apporter que des modifications minimes dans leurs propres images. Au lieu de cela, les opérateurs devraient fournir l'application de transporteur distincte pour la personnalisation de l'opérateur, permettant aux mises à jour d'être distribuées via des avenues telles que les magasins d'applications.

Comment le privilège est accordé à une application de transporteur

L'application de l'opérateur en question doit être signée avec le même certificat que celui trouvé sur la carte SIM, comme indiqué dans les privilèges de l' opérateur UICC .

Quelles informations sont transmises à l'application de l'opérateur

L'application de transporteur est fournie avec les valeurs suivantes, ce qui lui permet de prendre une décision dynamique quant aux valeurs à renvoyer:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • ID du transporteur

Pour plus d'informations sur l'intégration des ID de transporteur, consultez Intégration des ID de transporteur avec CarrierConfig .

Lors du chargement de la configuration du transporteur

La construction de la liste des paires valeur / clé se produit:

  • Lorsque la carte SIM est chargée (démarrage ou remplacement à chaud de la carte SIM)
  • Lorsque l'application de l'opérateur déclenche manuellement un rechargement
  • Lorsque l'application de l'opérateur est mise à jour

Voir la référence android.service.carrier.CarrierService#onLoadConfig() pour plus de détails.

Utilisation de la configuration

Lorsque la configuration est créée, les valeurs qu'elle contient sont utilisées pour définir diverses valeurs de configuration du système, notamment:

  • Paramètres de téléphonie du cadre interne
  • Valeurs de configuration renvoyées par le SDK, par exemple dans SmsManager
  • Paramètres d'application tels que les valeurs de connexion VVM dans le numéroteur

Clés de configuration

La liste des clés est définie dans le cadre du SDK public dans android.telephony.CarrierConfigManager et ne peut pas changer au sein du même niveau d'API. Voir le tableau ci-dessous pour un résumé des clés.

Construire l'application

Créer l'appli

Votre application doit cibler le niveau d'API Android 6.0 (23).

Déclarer une classe qui remplace android.service.carrier.CarrierService

  1. Remplacez onLoadConfig pour renvoyer les valeurs que vous souhaitez fournir en fonction de l'objet service.carrier.CarrierIdentifier passé.
  2. Ajoutez une logique pour appeler notifyConfigChangedForSubId dans les scénarios où la configuration de l'opérateur peut changer au fil du temps (par exemple, lorsque l'utilisateur ajoute des services supplémentaires à son compte).

Un exemple est ci-dessous:

public class SampleCarrierConfigService extends CarrierService {

    private static final String TAG = "SampleCarrierConfigService";

    public SampleCarrierConfigService() {
        Log.d(TAG, "Service created");
    }

    @Override
    public PersistableBundle onLoadConfig(CarrierIdentifier id) {
        Log.d(TAG, "Config being fetched");
        PersistableBundle config = new PersistableBundle();
        config.putBoolean(
            CarrierConfigManager.KEY_CARRIER_VOLTE_AVAILABLE_BOOL, true);
        config.putBoolean(
            CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, false);
        config.putInt(CarrierConfigManager.KEY_VOLTE_REPLACEMENT_RAT_INT, 6);
        // Check CarrierIdentifier and add more config if needed…
        return config;
    }
}

Pour plus de détails, consultez la référence android.service.carrier.CarrierService .

Nommer la classe dans le manifeste

Un exemple est ci-dessous:

<service android:name=".SampleCarrierConfigService"
android:label="@string/service_name"
android:permission="android.permission.BIND_CARRIER_SERVICES">
      <intent-filter>
      <action android:name="android.service.carrier.ConfigService"/></intent-filter>
</service>

Signature de l'application avec le même certificat sur SIM

Voir Privilèges de transporteur UICC pour les exigences.

Tester l'application

Lorsque vous avez créé votre application de configuration, vous pouvez tester votre code avec:

  • Une carte SIM contenant une signature de certificat valide
  • Un appareil exécutant Android 6.0 et versions ultérieures, par exemple un appareil Android