Сервис подбора домена

Для устройств под управлением Android 15 или более поздней версии вы можете реализовать выбор домена между службой IMS и устаревшими службами в сетях с коммутацией каналов с помощью системного API DomainSelectionService . DomainSelectionService — это четко определенный интерфейс между платформой Android и реализацией выбора домена, предоставленной поставщиком. Этот интерфейс позволяет реализации поставщика предоставлять платформе сигнальную информацию, такую ​​как домен, в котором размещаются исходящие вызовы и SMS, а также предпочтения типа сети при сканировании сети.

архитектура выбора домена

Рисунок 1. Схема архитектуры функции выбора домена

Примеры и источник

Android предоставляет эталонную реализацию функции выбора домена в AOSP в TelephonyDomainSelectionService . Подробную документацию по API DomainSelectionService см. в статье DomainSelectionService и других классах API.

Выполнение

Чтобы реализовать функцию выбора домена на устройстве Android, необходимо выполнить следующие действия:

  1. Создайте приложение для выбора домена. Служба должна быть определена в файле AndroidManifest.xml .

  2. Добавьте конфигурацию в наложение устройства, чтобы позволить платформе привязываться к реализации DomainSelectionService .

  3. Поддержка необходимых радиоинтерфейсов HAL для функции выбора домена.

В этом разделе представлена ​​дополнительная информация об этих шагах.

Добавьте запись службы в AndroidManifest.xml.

Чтобы ваше приложение выбора домена могло зарегистрировать службу DomainSelectionService в платформе, добавьте запись службы в файл манифеста, используя следующий формат:

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

Для работы функции выбора домена определение службы в AndroidManifest.xml должно определять следующие атрибуты.

  • directBootAware="true" : позволяет обнаружить и запустить службу по телефону до того, как пользователь разблокирует устройство. Служба не может получить доступ к зашифрованному хранилищу устройства, пока пользователь не разблокирует устройство. Дополнительные сведения см. в разделе Поддержка режима прямой загрузки и шифрования на основе файлов .

  • persistent="true" : позволяет службе работать постоянно и не отключаться системой для освобождения памяти. Этот атрибут работает , только если приложение создано как системное.

  • permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE" : гарантирует, что только процесс, которому предоставлено разрешение BIND_DOMAIN_SELECTION_SERVICE может привязываться к приложению. Это предотвращает привязку мошеннического приложения к службе, поскольку только системным приложениям платформа может предоставить разрешение.

Служба также должна указать элемент intent-filter с помощью действия android.telephony.DomainSelectionService . Это позволяет платформе найти службу DomainSelectionService .

Определить конфигурацию в наложении устройств

Чтобы платформа могла безопасно привязаться к службе DomainSelectionService , добавьте следующую конфигурацию в оверлей устройства:

Поскольку Android не поддерживает приложения со сторонними загружаемыми реализациями DomainSelectionService , приложение выбора домена должно быть системным приложением, которое находится в папке /system_ext/priv-app/ или /product/priv-app/ . Платформа проверяет, соответствует ли имя пакета реализации значению наложения устройства, чтобы обеспечить привязку только доверенных предустановленных приложений.

Поддержка радиоинтерфейсов HAL

Чтобы включить функцию выбора домена, поддержите следующие необходимые радиоинтерфейсы HAL:

  • 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);
    

Валидация

Чтобы проверить, что платформа телефонии правильно реагирует на интерфейс DomainSelectionService , запустите тесты CTS в DomainSelectionServiceTestOnMockModem .