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 à commutation de circuit à 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 le fournisseur. Cette interface permet à l'implémentation du fournisseur de fournir des informations de signalisation à la plate-forme, telles que le domaine à partir duquel les appels et les SMS sortants sont passés, ainsi que la préférence de type de réseau lors de l'analyse du réseau.
Figure 1 : Schéma de l'architecture pour 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, vous devez suivre les étapes suivantes :
Créez une application de sélection de domaine. Le service doit être défini dans le fichier
AndroidManifest.xml
.Ajoutez une configuration à la superposition de l'appareil pour permettre à la plate-forme de s'associer à l'implémentation
DomainSelectionService
.Prend en charge les interfaces HAL radio requises pour la fonctionnalité de sélection de domaine.
Cette section fournit plus de détails 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 en utilisant le 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écouvert et exécuté par la téléphonie avant que l'utilisateur déverrouille l'appareil. Le service ne peut pas accéder au stockage chiffré de l'appareil avant que l'utilisateur ne déverrouille l'appareil. Pour en savoir plus, consultez Compatibilité avec le mode Direct Boot et Chiffrement basé sur les fichiers.persistent="true"
: permet au service de s'exécuter de manière persistante et de ne pas être arrêté par le système pour libérer de la mémoire. Cet attribut ne fonctionne que si l'application est conçue comme une application système.permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
: garantit que seul un processus auquel l'autorisationBIND_DOMAIN_SELECTION_SERVICE
a été accordée peut se lier à l'application. Cela empêche une application malveillante de se lier au service, car seul le framework peut accorder l'autorisation 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 couche de superposition de l'appareil
Pour que la plate-forme puisse se lier de manière sécurisée au service DomainSelectionService
, ajoutez la configuration suivante à la superposition de l'appareil :
config_domain_selection_service_component_name
: nom du composant (chaîneComponentName
aplatie) pour le serviceDomainSelectionService
.
Étant donné qu'Android n'est pas compatible avec les applications comportant 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 de confiance sont liées.
Compatibilité avec les interfaces HAL radio
Pour activer la fonctionnalité de sélection du domaine, vous devez prendre en charge les interfaces radio HAL requises suivantes :
-
void setEmergencyMode(int serial, EmergencyMode emcModeType); void triggerEmergencyNetworkScan(int serial, EmergencyNetworkScanTrigger request); void cancelEmergencyNetworkScan(int serial, boolean resetScan); void exitEmergencyMode(int serial);
-
void emergencyNetworkScanResult(RadioIndicationType type, EmergencyRegResult result);
Validation
Pour tester que le framework de téléphonie répond correctement à l'interface DomainSelectionService
, exécutez les tests CTS dans DomainSelectionServiceTestOnMockModem
.