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

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

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

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

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

В Android есть эталонная реализация функции выбора домена в рамках проекта Android Open Source Project (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 , запустите тесты Compatibility Test Suite (CTS) в DomainSelectionServiceTestOnMockModem .