Configuration de l'opérateur

Android 6.0 et les versions ultérieures disposent d'une fonctionnalité pour fournir à la plate-forme une configuration spécifique à l'opérateur. Ce conformément aux droits d'opérateur UICC. introduite dans Android 5.1 (Lollipop MR1), permet aux opérateurs des superpositions de configuration statiques les opérateurs et les OEM peuvent fournir la configuration des opérateurs de façon dynamique la plate-forme via une interface définie.

Une application d'opérateur correctement signée peut être préchargée dans l'image système, installés automatiquement ou manuellement via une plate-forme de téléchargement d'applications. L'application est interrogée par la plate-forme pour fournir la configuration des paramètres y compris:

  • Réseaux en itinérance
  • Messagerie vocale visuelle
  • Paramètres réseau pour les SMS/MMS
  • Configurations VoLTE/IMS

L'application de l'opérateur est entièrement responsable de la détermination des valeurs à renvoyer. Ils peuvent être dynamiques en fonction d'informations détaillées transmises à l'application via Google Cloud.

Les principaux avantages de cette approche sont les suivants:

  • Configuration dynamique : prise en charge de concepts tels que configuration non dérivée d'une fonction MCCMNC, par exemple, d'opérateurs de réseaux virtuels mobiles (MVNO) ou d'activer des services supplémentaires par le client.
  • Compatibilité avec les appareils vendus via tous les canaux (par exemple, un le téléphone open market peut être configuré automatiquement avec la bonne en téléchargeant une application sur une plate-forme de téléchargement d'applications.
  • Sécurité : le droit pour fournir cette configuration est n'est distribué qu'aux applications signées par l'opérateur.
  • API définie : cette configuration était précédemment stockée. principalement dans des superpositions XML internes au sein du framework, et non via une API. L'API de configuration de l'opérateur dans Android 6.0 est publique et bien définie.

Fonctionnement

Charger 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 sur la plate-forme.

L'ensemble des valeurs associées à un appareil spécifique est déterminé en interrogeant les les composants suivants dans l'ordre:

  1. L'application de l'opérateur (facultatif, mais recommandé d'une configuration supplémentaire au-delà de ce qui existe dans l'application Android Open Projet source (AOSP)
  2. 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 précédent vers Android 6.0)

Application de configuration de la plate-forme

Une application de configuration de plate-forme générique est fournie avec l'image système. Cette application peut fournir pour toutes les variables qui ne sont pas incluses dans l'application d'opérateur standard. Configuration de la plate-forme l'application est disponible (sous Android 6.0) dans: packages/apps/CarrierConfig

L'objectif de cette application est de fournir une configuration par réseau lorsqu'un opérateur n'est pas installée, et les opérateurs/OEM ne doivent y apporter que des modifications minimes. dans leurs propres images. Les opérateurs doivent plutôt fournir l'application de l'opérateur distincte pour la personnalisation des opérateurs, ce qui permet de distribuer les mises à jour par le biais de moyens tels que en tant que plates-formes de téléchargement d'applications.

Attribution de droits à une application d'opérateur

L'application de l'opérateur en question doit être signée avec le même certificat que celui présent sur le site la carte SIM, comme indiqué dans l'article Droits d'opérateur de l'UICC.

Informations transmises à l'application de l'opérateur

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

  • MCC
  • MNC
  • SPN
  • IMSI
  • Numéro GID1
  • GID2
  • ID de l'opérateur

Pour en savoir plus sur l'intégration des ID d'opérateur, consultez <ph type="x-smartling-placeholder"></ph> Intégrer les ID d'opérateurs avec CarrierConfig.

Lors du chargement de la configuration de l'opérateur

La liste des paires clé-valeur est créée:

  • 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

Consultez les android.service.carrier.CarrierService#onLoadConfig() pour en savoir plus.

Utiliser la configuration

Lors de la création de la configuration, les valeurs qu'elle contient sont utilisées pour définir différentes valeurs de configuration système, y compris:

  • Paramètres de téléphonie du framework interne
  • Valeurs de configuration renvoyées par le SDK, par exemple dans SmsManager
  • Paramètres de l'application tels que les valeurs de connexion de la VM virtuelle dans l'application Téléphone

Clés de configuration

La liste des clés est définie pour le SDK public dans android.telephony.CarrierConfigManager. et ne peut pas changer dans le même niveau d'API. Vous trouverez un récapitulatif des clés dans le tableau ci-dessous.

Créer l'application

Créer l'application

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

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

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

Voici un exemple:

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 en savoir plus, consultez les android.service.carrier.CarrierService référence.

Nommer la classe dans le fichier manifeste

Voici un exemple:

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

Signez l'application avec la même certificat sur la SIM

Reportez-vous à la section Droits d'opérateur UICC pour exigences.

Ajouter des APN avec une application d'opérateur

Pour ajouter des APN de façon programmatique depuis l'application d'un opérateur (par exemple, lors de la connexion à la carte SIM activation), utilisez <ph type="x-smartling-placeholder"></ph> API ContentResolver pour ajouter des éléments APN à un fournisseur de contenu identifiés par l'URI <ph type="x-smartling-placeholder"></ph> android.provider.Telephony.Carriers.CONTENT_URI Pour en savoir plus sur la structure de la table pour l'URI de contenu, consultez <ph type="x-smartling-placeholder"></ph> Telephony.Carriers.

Pour en savoir plus, consultez APN et CarrierConfig.

Tester l'application

Après avoir créé votre application de configuration, vous pouvez tester votre code par:

  • Une carte SIM contenant une signature de certificat valide
  • Un appareil équipé d'Android 6.0 ou version ultérieure (un appareil Android, par exemple)