Configuration de l'opérateur

Android 6.0 et versions ultérieures permettent aux applications privilégiées de fournir une configuration spécifique à l'opérateur à la plate-forme. Cette fonctionnalité, basée sur les privilèges d'opérateur UICC introduits dans Android 5.1 (Lollipop MR1), permet de déplacer la configuration de l'opérateur des superpositions de configuration statiques et offre aux opérateurs et aux OEM la possibilité de fournir dynamiquement une configuration d'opérateur à 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ée automatiquement ou installée manuellement via une boutique d'applications. La plate-forme interroge l'application pour fournir la configuration des paramètres, y compris :

  • Réseaux en itinérance/hors itinérance
  • 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 d'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 les suivants :

  • Configuration dynamique : prise en charge de concepts tels que la configuration dérivée non MCCMNC, par exemple, les opérateurs de réseau mobile virtuel (MVNO) ou l'activation par le client de services supplémentaires.
  • Prise en charge des appareils vendus via n'importe quel canal : par exemple, un téléphone sur le marché ouvert peut être configuré automatiquement avec les bons paramètres en téléchargeant une application depuis 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 principalement stockée dans des superpositions XML internes au framework et non via une API publique. L'API de configuration d'opérateur dans Android 6.0 est publique et bien définie.

Fonctionnement

Charger la configuration

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

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

  1. L'application d'opérateur (facultatif, mais emplacement recommandé pour une configuration supplémentaire au-delà de ce qui existe dans l'Android Open Source Project (AOSP))
  2. L'application de configuration de la 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 plate-forme

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 d'opérateur standard ne fournit pas. L'application de configuration de la plate-forme se trouve (dans Android 6.0) dans : packages/apps/CarrierConfig

L'objectif de cette application est de fournir une configuration par réseau lorsqu'une application d'opérateur n'est pas installée. Les opérateurs/OEM ne doivent y apporter que des modifications minimes dans leurs propres images. Au lieu de cela, les opérateurs doivent fournir l'application d'opérateur distincte pour la personnalisation de l'opérateur, ce qui permet de distribuer les mises à jour via des canaux tels que les boutiques d'applications.

Comment les privilèges sont-ils accordés à une application d'opérateur ?

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

Quelles informations sont transmises à l'application d'opérateur ?

L'application d'opérateur reçoit les valeurs suivantes, ce qui lui permet de prendre une décision dynamique quant aux valeurs à renvoyer :

  • CM
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • ID de l'opérateur

Pour en savoir plus sur l'intégration des ID d'opérateur, consultez Intégrer des ID d'opérateur à CarrierConfig.

Quand le chargement de la configuration d'opérateur a-t-il lieu ?

La création de la liste des paires clé/valeur a lieu :

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

Pour en savoir plus, consultez la android.service.carrier.CarrierService#onLoadConfig() référence.

Utiliser la configuration

Une fois la configuration créée, les valeurs qu'elle contient sont utilisées pour définir différentes valeurs de configuration du 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 d'application tels que les valeurs de connexion VVM dans le Dialer

Clés de configuration

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

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. Remplacez onLoadConfig pour renvoyer les valeurs que vous souhaitez fournir en fonction de l'objet service.carrier.CarrierIdentifier transmis.
  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).

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

Signer l'application avec le même certificat sur la carte SIM

Pour connaître les exigences, consultez Privilèges d'opérateur UICC.

Ajouter des APN avec une application d'opérateur

Pour ajouter des APN par programmation à partir d'une application d'opérateur (par exemple, lors de l'activation de la carte SIM), utilisez ContentResolver les API pour ajouter des éléments APN à un fournisseur de contenu identifié par l'URI android.provider.Telephony.Carriers.CONTENT_URI. Pour en savoir plus sur la structure de la table pour l'URI de contenu, consultez Telephony.Carriers.

Pour en savoir plus, consultez APN et CarrierConfig.

Tester l'application

Une fois votre application de configuration créée, vous pouvez tester votre code avec :

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

Définir les fonctionnalités du service d'opérateur

Dans Android, les fonctionnalités du service d'opérateur décrivent si les services vocaux, de messagerie et de données sont compatibles sur un appareil. Les opérateurs peuvent spécifier les fonctionnalités du service d'opérateur pour un appareil au niveau de l'appareil et au niveau de l'abonnement (Android 15 ou version ultérieure).

Fonctionnalités de service au niveau de l'appareil

Les fonctionnalités de service au niveau de l'appareil sont configurées lors de la fabrication d'un appareil (elles ne peuvent pas être modifiées après la fabrication). Les opérateurs peuvent spécifier des fonctionnalités au niveau de l'appareil via les remplacements de ressources système suivants :

Les applications peuvent interroger les fonctionnalités de service au niveau de l'appareil via les API suivantes :

Fonctionnalités de service au niveau de l'abonnement

Pour les appareils équipés d'Android 15 ou version ultérieure, les opérateurs peuvent spécifier les fonctionnalités de service de l'appareil au niveau de l'abonnement. Pour spécifier les fonctionnalités de service au niveau de l'abonnement, utilisez l' CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY API. Par exemple, pour spécifier qu'un abonnement est réservé aux données, définissez la valeur sur SubscriptionManager#SERVICE_CAPABILITY_DATA.

Les applications (applications système préchargées et applications tierces) peuvent interroger les fonctionnalités du service d'opérateur pour un abonnement spécifié via la SubscriptionInfo.getServiceCapabilities() méthode. Cela permet aux développeurs d'applications de personnaliser l'expérience utilisateur des applications en fonction des fonctionnalités disponibles pour l'abonnement. Par exemple, les développeurs d'applications peuvent s'assurer que l'application de numérotation n'autorise pas les appels si l'utilisateur dispose d'un abonnement réservé aux données.

API de fonctionnalités de service obsolètes

À partir d'Android 15, Android fournit des fonctionnalités de service au niveau de l'appareil et au niveau de l'abonnement. En raison de cette modification, les API de fonctionnalités au niveau de l'appareil existantes ont été renommées pour une meilleure lisibilité. Le tableau suivant répertorie les API obsolètes et les API renommées introduites dans Android 15 :

Obsolète (Android 14 ou version antérieure) Équivalent (Android 15 ou version ultérieure)
TelephonyManager.isVoiceCapable() TelephonyManager.isDeviceVoiceCapable()
TelephonyManager.isSmsCapable() TelephonyManager.isDeviceSmsCapable()