Для устройств под управлением Android 15 или более поздней версии вы можете реализовать выбор домена между службой IMS и устаревшими службами в сетях с коммутацией каналов с помощью системного API DomainSelectionService
. DomainSelectionService
— это четко определенный интерфейс между платформой Android и реализацией выбора домена, предоставленной поставщиком. Этот интерфейс позволяет реализации поставщика предоставлять платформе сигнальную информацию, такую как домен, в котором размещаются исходящие вызовы и SMS, а также предпочтения типа сети при сканировании сети.
Рисунок 1. Схема архитектуры функции выбора домена
Примеры и источник
Android предоставляет эталонную реализацию функции выбора домена в AOSP в TelephonyDomainSelectionService
. Подробную документацию по API DomainSelectionService
см. в статье DomainSelectionService
и других классах API.
Выполнение
Чтобы реализовать функцию выбора домена на устройстве Android, необходимо выполнить следующие действия:
Создайте приложение для выбора домена. Служба должна быть определена в файле
AndroidManifest.xml
.Добавьте конфигурацию в наложение устройства, чтобы позволить платформе привязываться к реализации
DomainSelectionService
.Поддержка необходимых радиоинтерфейсов 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
, добавьте следующую конфигурацию в оверлей устройства:
-
config_domain_selection_service_component_name
: имя компонента (сведенная строкаComponentName
) для службыDomainSelectionService
Поскольку Android не поддерживает приложения со сторонними загружаемыми реализациями DomainSelectionService
, приложение выбора домена должно быть системным приложением, которое находится в папке /system_ext/priv-app/
или /product/priv-app/
. Платформа проверяет, соответствует ли имя пакета реализации значению наложения устройства, чтобы обеспечить привязку только доверенных предустановленных приложений.
Поддержка радиоинтерфейсов HAL
Чтобы включить функцию выбора домена, поддержите следующие необходимые радиоинтерфейсы HAL:
-
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);
Валидация
Чтобы проверить, что платформа телефонии правильно реагирует на интерфейс DomainSelectionService
, запустите тесты CTS в DomainSelectionServiceTestOnMockModem
.