CellBroadcast モジュールを利用すると、OEM で作業を繰り返す労力が軽減されます(同時に Android エコシステム全体の断片化が減少し、エンドユーザーに一貫した動作を提供できます)。また、携帯通信会社に提供する CellBroadcast 関連の要件テストおよび認定の合理化にも役立ちます(OEM 側でコードを変更できないため)。このモジュールはアップデート可能です。つまり、通常の Android リリース サイクル外で機能のアップデートを受信できます。
パッケージの形式
CellBroadcast モジュールは、次のサービスとアプリで構成されます。
CellBroadcastService サービスは、CellBroadcast SMS デコード、ワイヤレス緊急アラート(WFA)3.0 のジオフェンス、メッセージ重複チェック、アプリへのメッセージ ブロードキャストをサポートしています。これは、1 対多の地域ターゲットおよびジオフェンスが適用されたメッセージ サービスであり、定義されたエリア内の複数のスマートフォン ユーザーにメッセージを同時配信できるよう設計されています。このサービスは、ETSI GSM 委員会 3GPP によって定義されており、通信規格の一部に含まれています。
CellBroadcastReceiver アプリはデフォルトのシステムアプリです。緊急アラートと緊急性のないアラート(アンバー アラートや国家レベルの警報など)を処理し、携帯通信会社と地域の規制に基づいて、情報をエンドユーザーに通知します。
CellBroadcast のメッセージ フロー
次の図は、CellBroadcast のメッセージ フローを示しています。
図 1:CellBroadcastReceiver のメッセージ フロー
無線インターフェース レイヤ(RIL)によって、CDMA/GSM CellBroadcast SMS に関する通知が
InBoundSMSHandler
に送信されます。フレームワークは、着信したメッセージの解析と処理のために CellBroadcast SMS を CBS モジュールに転送します。
メッセージが処理されると、CellBroadcastService は、システムのデフォルトの CellBroadcastReceiver アプリにインテントを転送します。
CellBroadcastReceiver アプリがユーザーにメッセージを表示します。
モジュールの形式
CellBroadcastService と CellBroadcastReceiver アプリは 1 つの APEX ファイル(com.android.cellbroadcast
)に含まれています。このファイルは Android 11 以降を搭載したデバイスで利用できます。このモジュールのコードは package/app/CellBroadcastReceiver
にあり、既存のフレームワーク クラスを packages/modules/CellBroadcastService
に移行しています。
モジュールの依存関係
CellBroadcast モジュールは、@hide
API は使用せず安定版の @SystemApi
のみを使用してフレームワークと通信し、次の静的ライブラリと依存関係があります。
Androidx.legacy_legacy-support-v13
Androidx.recyclerview_recyclerview
Androidx.preference_preference
androidx.legacy_legacy-preference-v14
androidx.appcompat_appcompat
ランタイム リソース オーバーレイ(RRO)を使用して設定をカスタマイズできます。
権限の設定
CellBroadcast モジュールは、プラットフォーム署名ではなく Google の署名で署名されます。つまり、このモジュールは署名権限にアクセスできなくなります。その代わり、Android 11 では CellBroadcast モジュール内で新しい署名権限 com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY
が定義されます。権限を取得できるのは、モジュール内にあり同じキーで署名されるパッケージのみです。この権限により、CellBroadcastService 内のデータベースに対する完全なアクセス権が CellBroadcastReceiver アプリに付与されます。
プラットフォームによって、デフォルトのシステム SMS アプリに android.permission.READ_CELL_BROADCASTS
ランタイムの権限が付与され、緊急アラート履歴へのアクセスが可能になります。
CellBroadcast モジュールの統合
このセクションでは、CellBroadcast モジュールを統合する方法について説明します。
設定との統合
設定アプリ内で CellBroadcast の設定を統合する場所を指定できます(エンドユーザーは [設定] > [アプリと通知] > [詳細設定] > [緊急速報メール] で CellBroadcast 設定ページにアクセスします)。設定アプリから CellBroadcastReceiver アプリを起動するには、次の設定を変更してパッケージ名 com.android.cellbroadcastreceiver
を指定します。
<!-- Cell broacast receiver package name [DO NOT TRANSLATE] -->
<string name="cell_broadcast_receiver_package">
com.android.cellbroadcastreceiver</string>
メッセージ アプリとの統合
アプリのリンクをメッセージ アプリに統合することで、CellBroadcast のメッセージ履歴を開くことができます。Android メッセージ アプリでは、これは [設定] > [詳細設定] > [緊急速報] に統合されます。独自のメッセージ アプリ内にリンクを統合するには、メッセージ アプリでパスを定義し、CellBroadcast モジュールのコンポーネント名を com.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity
に設定します。
SMS 受信トレイとの統合
ランタイム リソース オーバーレイを使用して次の設定をオーバーライドすることにより、デフォルトのメッセージ アプリに CellBroadcast メッセージを表示できます。
<item type="bool" name="enable_write_alerts_to_sms_inbox" />
権限の付与は CellBroadcast モジュールの対象範囲外なので、エンドツーエンドのサポートを提供するには CellBroadcast モジュールに AppOpsManager.OP_WRITE_SMS
権限を付与する必要があります。AOSP リファレンス実装については、こちらの SmsApplication.java
パッチをご覧ください。
CellBroadcastReceiver アプリの起動
CellBroadcastReceiver アプリの起動ポイントには以下が含まれます。
設定アプリのメニュー。
CellBroadcast のメッセージ履歴にリンクするメッセージ アプリなどのアプリ(サードパーティ アプリを含む)。
(省略可)OEM により追加された Android のホーム画面の起動アイコン。詳しくは、起動アイコンの追加をご覧ください。
CellBroadcastReceiver アプリの設定
次のスクリーンショットは、CellBroadcastReceiver アプリの設定メニューを示しています。
図 2.CellBroadcastReceiver アプリの設定メニュー
図 3. 緊急速報メール履歴画面
起動アイコンの追加
アプリ ランチャーまたは独自の起動アイコンを通じて CellBroadcast のメッセージ履歴にアクセスできるようにすることが可能です。
アプリ ランチャーからメッセージ履歴にアクセスできるようにするには、RRO を使用して次の設定をオーバーライドします。
<item type="bool" name="show_message_history_in_launcher" />
AOSP のデフォルト アイコンをオーバーライドするには、RRO を使用して次の設定をオーバーライドします。
<!-- Customize launcher icon for cellbroadcast history --> <item type="mipmap" name="ic_launcher_cell_broadcast" />
CMAS シークレット コードの有効化
CMAS シークレット コード *#*#CMAS#*#*(ダイヤルパッドでは *#*#2627#*#*)を有効にするには、電話アプリで、*#*#code#*#* という形式の特別な電話アプリコードをリッスンし、パブリック メソッド sendDialerSpecialCode
を使用してコードを処理する必要があります。
地域情報要件: チャンネル 50
チャンネル 50 は、携帯通信会社が地域関連情報を配信するための特別チャンネルです(南アフリカの MTN は除く)。このチャンネルでは、ブロードキャスト メッセージの配信があってもポップアップ ダイアログや通知は表示されません。その代わり、設定メニューの SIM ステータスまたはステータスバー(郵便番号の表示など)にブロードキャスト メッセージが表示されます。
Android CellBroadcastService の実装では、設定アプリと SysUI アプリがブロードキャスト チャンネル 50 の情報を取得するために、緊急速報メールサービスで次の API をサポートしています。これを実装する手順は次のとおりです。
ブロードキャスト
android.telephony.action.AREA_INFO_UPDATED
を登録し、RRO を介してレシーバー パッケージ名config_area_info_receiver_packages
をオーバーライドします。CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE
にバインドします。
設定アプリと SysUI アプリは CellBroadcast モジュールの対象範囲外なので、エンドツーエンドのサポートを提供するには SystemUI または設定アプリで変更を適用する必要があります。リファレンス実装については、CellBroadcastService 設定アプリをご覧ください。
カスタマイズ
CellBroadcast モジュールのソースコードを直接変更することはできませんが、ランタイム リソース オーバーレイ(RRO)を使用してパラメータを有効(または無効)にすることができます(たとえば、通知の色やダイアログ上のサイズをカスタマイズできます)。CellBroadcast モジュールで使用されているパラメータのデフォルト値をオーバーライドするには、ターゲット パッケージ名を com.android.cellbroadcastreceiver
に変更します。また、
オーバーレイ可能な設定のリストについては、
overlayable.xml
をご覧ください。実装例については、AOSP の
RROSampleTestApp
をご覧ください。
実装に UI 文字列の翻訳リソースがない場合や、翻訳がふさわしくないと思われる場合は、RRO を使用して翻訳リソースをオーバーライドする、または Google 翻訳チームと協力して文字列の翻訳を CellBroadcast モジュールにアップストリームすることができます。翻訳リソースをオーバーライドする場合は、Google は対象の文字列を overlayable.xml
で公開して、オーバーライドできるようにする必要があります。UI をカスタマイズするためにさらに設定が必要な場合は、CellBroadcast サポート グループにお問い合わせください。
データの移行
Android 11 にはレガシーの CellBroadcast アプリが含まれています。これは、CellBroadcast モジュールにアップグレードするデバイスのアプリデータ(ユーザー設定や緊急アラート履歴など)を保持および移行するためのメカニズムです。CellBroadcast モジュールを使用する Android の実装には、データ移行用として、ビルドにレガシーの CellBroadcast アプリを含める必要があります。カスタムの CellBroadcast ソリューションを実装に使用する場合は、CellBroadcastContentProvider APK を定義してデータを保持する必要があります(レガシーの緊急速報メール APK は、以降のリリースで安全に削除できます)。
CellBroadcast モジュールを使用するようアップグレードしたデバイスでは、CellBroadcast モジュールが、AOSP の LegacyCellBroadcastApp から、または明確に定義された cellbroadcast-legacy
オーソリティを使用して OEM が定義した CellBroadcastContentProvider APK からデータを取得します。
OEM 定義の CellBroadcastContentProvider APK を使用する
CellBroadcastContentProvider APK を定義する場合、APK を次の仕様に適合させる必要があります。
この APK はヘッドレス APK で、
cellbroadcast-legacy
オーソリティで特定されるContentProvider
オブジェクトからSharedPreferences
とデータベースの内容のみを表示し、サードパーティ アプリにはアクセスできないようにします。この APK の開発と所有は OEM が行います。その場合、OEM は非公開の状態で API スキーマのホストを続けることができます。
SharedPreferences
を CellBroadcast モジュールに移行するには、次のパラメータが指定された ContentProvider.call
メソッドを CellBroadcastContentProvider APK がサポートする必要があります。
- オーソリティ:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
- メソッド:
@SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
引数:
@SystemAPI CellBroadcast.Preference
これは、CellBroadcast モジュールに対してサポートされている共有プリファレンス キーのリストです。
ContentProvider.call
メソッドに対してSharedPreferences
からデータが取り込まれます。
メッセージ履歴を CellBroadcast モジュールに移行するには、次のパラメータが指定された ContentProvider.query
メソッドを CellBroadcastContentProvider APK がサポートする必要があります。
- オーソリティ:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
。クエリ列には、CellBroadcast モジュールに対してサポートされているメッセージ プロパティが一覧表示されます。ContentProvider.query
メソッドに対して(データベースから)データが取り込まれます。
CellBroadcastContentProvider,
のリファレンス実装については、LegacyCellBroadcastContentProvider
をご覧ください。
テスト
Android 互換性テストスイート(CTS)で、アプリに依存するシステム API の機能を検証します。CellBroadcast モジュール unit tests/testappsp
を実行することもできます。
OEM がデバイスに対して CMAS シークレット コードを有効にしている場合、そのデバイスでは、次のような機能を備えたデバッグモードをサポートできます。
テストアラート。オン / オフを切り替えることができる [その他のアラート] にグループ化されます。
履歴。受信はしたが表示されなかったすべてのメッセージ(重複メッセージや他言語のメッセージなど)が含まれます。
メッセージ。シリアル番号、メッセージ ID、有効期限など、使用可能なすべてのパラメータが表示されます。
デバッグモードを有効にするには、電話アプリで *#*#CMAS#*#* とダイヤルします。
お問い合わせ
CellBroadcast モジュールに関するさらに詳細な情報やご質問については、CellBroadcast サポート グループにお問い合わせください。