Service de sélection de domaine

Pour les appareils équipés d'Android 15 ou d'une version ultérieure, vous pouvez implémenter la sélection de domaine entre le service IMS et les anciens services sur les réseaux commutés par circuits à l'aide de l'API système DomainSelectionService. DomainSelectionService est une interface bien définie entre la plate-forme Android et une implémentation de sélection de domaine fournie par un fournisseur. Cette interface permet à l'implémentation du fournisseur de fournir à la plate-forme des informations de signal, telles que le domaine sur lequel les appels et les SMS sortants sont passés, et la préférence de type de réseau dans l'analyse de réseau.

domain-selection-architecture

Figure 1 : Schéma de l'architecture de la fonctionnalité de sélection de domaine

Exemples et source

Android fournit une implémentation de référence pour la fonctionnalité de sélection de domaine dans AOSP à l'adresse TelephonyDomainSelectionService. Pour obtenir une documentation détaillée sur l'API DomainSelectionService, consultez DomainSelectionService et les autres classes de l'API.

Implémentation

Pour implémenter la fonctionnalité de sélection de domaine sur un appareil Android, procédez comme suit:

  1. Créez une application de sélection de domaine. Le service doit être défini dans le fichier AndroidManifest.xml.

  2. Ajoutez une configuration à la superposition de l'appareil pour permettre à la plate-forme de s'associer à l'implémentation DomainSelectionService.

  3. Compatibilité avec les interfaces HAL des cases d'option requises pour la fonctionnalité de sélection de domaine.

Cette section fournit des informations supplémentaires sur ces étapes.

Ajouter une entrée de service dans AndroidManifest.xml

Pour que votre application de sélection de domaine enregistre le service DomainSelectionService auprès du framework, ajoutez une entrée de service dans le fichier manifeste à l'aide du format suivant:

<service
     android:name="com.example.domainselection.DomainSelectionService"
     android:directBootAware="true"
     android:persistent="true"
     …
     android:permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
     …
    <intent-filter>
        <action android:name="android.telephony.DomainSelectionService"/>
    </intent-filter>
    …
</service>

La définition de service dans AndroidManifest.xml doit définir les attributs suivants pour que la fonctionnalité de sélection de domaine fonctionne.

  • directBootAware="true": permet au service d'être détecté et exécuté par la téléphonie avant que l'utilisateur ne déverrouille l'appareil. Le service ne peut pas accéder au stockage chiffré par l'appareil avant que l'utilisateur ne déverrouille l'appareil. Pour en savoir plus, consultez les sections Prendre en charge le mode Démarrage direct et Chiffrement basé sur les fichiers.

  • persistent="true": permet d'exécuter le service de manière persistante et de ne pas le tuer par le système pour récupérer de la mémoire. Cet attribut ne fonctionne que si l'application est compilée en tant qu'application système.

  • permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE": garantit que seul un processus disposant de l'autorisation BIND_DOMAIN_SELECTION_SERVICE qui lui est accordée peut être lié à l'application. Cela empêche une application non autorisée de s'associer au service, car le framework ne peut accorder l'autorisation qu'aux applications système.

Le service doit également spécifier l'élément intent-filter avec l'action android.telephony.DomainSelectionService. Cela permet au framework de trouver le service DomainSelectionService.

Définir la configuration dans la superposition d'appareil

Pour que la plate-forme se lie de manière sécurisée au service DomainSelectionService, ajoutez la configuration suivante à la superposition de l'appareil:

Étant donné qu'Android n'est pas compatible avec les applications avec des implémentations DomainSelectionService téléchargeables par des tiers, l'application de sélection de domaine doit être une application système résidant dans le dossier /system_ext/priv-app/ ou /product/priv-app/. Le framework vérifie si le nom du package de l'implémentation correspond à la valeur de superposition de l'appareil pour s'assurer que seules les applications préinstallées fiables sont liées.

Prise en charge des interfaces HAL radio

Pour activer la fonctionnalité de sélection de domaine, prenez en charge les interfaces HAL radio requises suivantes:

  • IRadioNetwork

    void setEmergencyMode(int serial, EmergencyMode emcModeType);
    void triggerEmergencyNetworkScan(int serial,
            EmergencyNetworkScanTrigger request);
    void cancelEmergencyNetworkScan(int serial, boolean resetScan);
    void exitEmergencyMode(int serial);
    
  • IRadioNetworkIndication

    void emergencyNetworkScanResult(RadioIndicationType type,
            EmergencyRegResult result);
    

Validation

Pour vérifier que le framework de téléphonie répond correctement à l'interface DomainSelectionService, exécutez les tests CTS dans DomainSelectionServiceTestOnMockModem.