ドメイン選択サービス

Android 15 以降を搭載したデバイスでは、DomainSelectionService システム API を使用して回路切り替えネットワークを介する IMS サービスと以前のサービス間のドメイン選択を実装できます。DomainSelectionService は、Android プラットフォームとベンダーが提供するドメイン選択実装の間に介在する、明確に定義されたインターフェースです。このインターフェースにより、ベンダーの実装は信号情報(発信や SMS が発生するドメイン、ネットワーク スキャンでのネットワークの種類の設定など)をプラットフォームに提供します。

domain-selection-architecture

図 1. ドメイン選択機能のアーキテクチャ図

例とソース

Android には、TelephonyDomainSelectionService に AOSP のドメイン選択機能向けのリファレンス実装が用意されています。DomainSelectionService API の詳細については、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 権限を付与されたプロセスのみがアプリにバインドできるようにします。フレームワークからこの権限を付与できるのはシステムアプリのみであるため、不正なアプリがサービスにバインドされるのを防止できます。

サービスでは、android.telephony.DomainSelectionService アクションを含む intent-filter 要素も指定する必要があります。これによって、フレームワークが 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 インターフェースに適切に応答することをテストするため、DomainSelectionServiceTestOnMockModem で CTS テストを実行します。