CellBroadcast モジュールは、OEM の繰り返しの作業を減らし (Android エコシステム全体の断片化を減らし、エンド ユーザーに一貫した動作を提供します)、CellBroadcast 関連の要件のキャリア テストと認証を合理化するのに役立ちます (OEM はコードを変更できないため)。 )。このモジュールは更新可能です。つまり、通常の Android リリース サイクル以外で機能の更新を受け取ることができます。
パッケージ形式
CellBroadcast モジュールは、以下のサービスとアプリで構成されています。
CellBroadcastServiceサービスは、CellBroadcast SMS のデコード、Wireless Emergency Alert (WEA) 3.0 のジオフェンシング、メッセージの重複チェック、アプリへのメッセージのブロードキャストをサポートしています。これは、定義されたエリア内の複数の携帯電話ユーザーに同時にメッセージを配信するように設計された、1 対多のジオターゲティングおよびジオフェンス メッセージング サービスです。このサービスは、 ETSI GSM 委員会である3GPPによって定義され、電気通信標準の一部です。
CellBroadcastReceiverアプリは、緊急および非緊急のアラート (黄色や大統領のアラートなど) を処理し、通信事業者および地域の規制に基づいてエンド ユーザーに情報を提示する既定のシステム アプリです。
CellBroadcast メッセージ フロー
次の図は、CellBroadcast のメッセージ フローを示しています。
図 1. CellBroadcastReceiver メッセージ フロー
Radio Interface Layer (RIL) は、CDMA/GSM CellBroadcast SMS について
InBoundSMSHandler
に通知します。フレームワークは、CellBroadcast SMS を CBS モジュールに転送して、着信メッセージを解析および処理します。
メッセージが処理された後、CellBroadcastService はインテントをシステムのデフォルトの CellBroadcastReceiver アプリに転送します。
CellBroadcastReceiver アプリは、ユーザーにメッセージを表示します。
モジュール形式
CellBroadcastService と CellBroadcastReceiver アプリは単一のAPEXファイル ( com.android.cellbroadcast
) に含まれており、Android 11 以降を実行しているデバイスで使用できます。モジュールにはpackage/app/CellBroadcastReceiver
にコードが含まれ、既存のフレームワーク クラスがpackages/modules/CellBroadcastService
に移行されます。
モジュールの依存関係
CellBroadcast モジュールは、安定した@SystemApi
( @hide
API なし) のみを使用してフレームワークと対話し、次の静的ライブラリに依存します。
-
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
を定義します。モジュール内のパッケージのみが同じキーで署名されているため、アクセス許可を取得できます。この権限により、CellBroadcastReceiver アプリは CellBroadcastService 内のデータベースに完全にアクセスできます。
プラットフォームは、緊急警報の履歴にアクセスするために、デフォルトのシステム 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 Messaging アプリでは、これはSettings > Advanced > Emergency alertに統合されています。独自のメッセージング アプリにリンクを統合するには、メッセージング アプリでパスを定義し、CellBroadcast モジュールのコンポーネント名をcom.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity
として構成します。
SMS 受信トレイとの統合
ランタイム リソース オーバーレイを使用して次の構成をオーバーライドすることで、デフォルトのメッセージング アプリで CellBroadcast メッセージを表示できるようになります。
<item type="bool" name="enable_write_alerts_to_sms_inbox" />
パーミッションの付与は CellBroadcast モジュールの範囲外であるため、 AppOpsManager.OP_WRITE_SMS
パーミッションを CellBroadcast モジュールに付与して、エンドツーエンドのサポートを提供する必要があります。 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 実装は、ブロードキャスト チャネル 50 情報を取得するために、設定および SysUI アプリのセル ブロードキャスト サービスで次の 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-legacy
オーソリティを通じて AOSP LegacyCellBroadcastApp または OEM 定義の CellBroadcastContentProvider APK からデータを取得します。
OEM 定義の CellBroadcastContentProvider APK の使用
CellBroadcastContentProvider APK を定義する場合、APK はこれらの仕様に従う必要があります。
APK は、
cellbroadcast-legacy
権限を持つContentProvider
オブジェクトを介してデータベースとSharedPreferences
のコンテンツのみを表示するヘッドレスAPK であり、サードパーティ アプリからはアクセスできません。APK は OEM によって開発および所有され、OEM は非表示の API スキーマを引き続きホストできます。
SharedPreferences
を CellBroadcast モジュールに移行するには、CellBroadcastContentProvider APK が次のパラメーターを持つContentProvider.call
) メソッドをサポートする必要があります。
- 権限:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
- メソッド:
@SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
引数:
@SystemAPI CellBroadcast.Preference
これは、CellBroadcast モジュールでサポートされている共有設定キーのリストです。データは
ContentProvider.call
メソッドのSharedPreferences
から取得されます。
メッセージ履歴を CellBroadcast モジュールに移行するには、CellBroadcastContentProvider APK が次のパラメーターを使用してContentProvider.query
メソッドをサポートする必要があります。
- 権限:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
.クエリ列には、CellBroadcast モジュールでサポートされているメッセージ プロパティが一覧表示されます。ContentProvider.query
メソッドのデータを (データベースから) 取り込みます。
CellBroadcastContentProvider の参照実装については、 CellBroadcastContentProvider,
参照してLegacyCellBroadcastContentProvider
。
テスト
Android 互換性テスト スイート (CTS) は、アプリに依存するシステム API の機能を検証します。 CellBroadcast モジュールunit tests/testappsp
を実行することもできます。
OEM がデバイスの CMAS シークレット コードを有効にしている場合、そのデバイスは次の機能を使用してデバッグ モードをサポートできます。
テスト アラートは、オン/オフのトグルで [その他のアラート] の下にグループ化されます。
履歴には、重複したメッセージや別の言語のメッセージなど、受信されたが表示されなかったすべてのメッセージが含まれます。
メッセージには、シリアル番号、メッセージ ID、有効期限など、使用可能なすべてのパラメーターが表示されます。
デバッグ モードを有効にするには、ダイヤラーで*#*#CMAS#*#*をダイヤルします。
コンタクト
CellBroadcast モジュールの詳細または質問については、 CellBroadcast サポート グループにお問い合わせください。