Android 15 以降を搭載したデバイスでは、DomainSelectionService
システム API を使用して回路切り替えネットワークを介する IMS サービスと以前のサービス間のドメイン選択を実装できます。DomainSelectionService
は、Android プラットフォームとベンダーが提供するドメイン選択実装の間に介在する、明確に定義されたインターフェースです。このインターフェースにより、ベンダーの実装は信号情報(発信や SMS が発生するドメイン、ネットワーク スキャンでのネットワークの種類の設定など)をプラットフォームに提供します。
図 1. ドメイン選択機能のアーキテクチャ図
例とソース
Android には、TelephonyDomainSelectionService
に AOSP のドメイン選択機能向けのリファレンス実装が用意されています。DomainSelectionService
API の詳細については、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
権限を付与されたプロセスのみがアプリにバインドできるようにします。フレームワークからこの権限を付与できるのはシステムアプリのみであるため、不正なアプリがサービスにバインドされるのを防止できます。
サービスでは、android.telephony.DomainSelectionService
アクションを含む intent-filter
要素も指定する必要があります。これによって、フレームワークが DomainSelectionService
サービスを見つけられるようになります。
デバイス オーバーレイで設定を定義する
プラットフォームが DomainSelectionService
サービスに安全にバインドできるよう、デバイス オーバーレイに以下の設定を追加します。
config_domain_selection_service_component_name
:DomainSelectionService
サービスのコンポーネント名(フラット化されたComponentName
文字列)
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
インターフェースに適切に応答することをテストするため、DomainSelectionServiceTestOnMockModem
で CTS テストを実行します。