CellBroadcast 模組可減少 OEM 的重複工作 (進而減少 Android 生態系統的碎片化,並為使用者提供一致的行為),並協助簡化與 CellBroadcast 相關需求的電信業者測試和認證 (因為 OEM 無法修改程式碼)。這個模組可更新,也就是說,即使不在正常的 Android 發布週期內,也能接收功能更新。
套件格式
CellBroadcast 模組包含下列服務和應用程式。
CellBroadcastService 服務支援區域廣播簡訊解碼、無線緊急警報 (WEA) 3.0 的地理圍欄、訊息重複檢查,以及向應用程式廣播訊息。這項服務可向特定區域內的多位行動電話使用者,同時傳送一對多的地理位置目標對象和地理圍欄訊息。這項服務由 ETSI GSM 委員會和 3GPP 定義,是電信標準的一部分。
CellBroadcastReceiver 應用程式是預設的系統應用程式,可處理緊急和非緊急警報 (例如安珀警報和總統警報),並根據電信業者和區域法規向使用者顯示資訊。
CellBroadcast 訊息流程
下圖顯示 CellBroadcast 訊息流程。
圖 1. CellBroadcastReceiver 訊息流程
無線電介面層 (RIL) 會通知
InBoundSMSHandler
CDMA/GSM CellBroadcast SMS。架構會將 CellBroadcast SMS 轉送至 CBS 模組,以便剖析及處理來電訊息。
訊息處理完畢後,CellBroadcastService 會將 Intent 轉送至系統預設的 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 內的資料庫。
平台會將 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
。
整合簡訊收件匣
如要啟用在預設訊息應用程式中顯示 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" />
如要覆寫 Android 開放原始碼計畫的預設圖示,請使用 RRO 覆寫下列設定。
<!-- Customize launcher icon for cellbroadcast history --> <item type="mipmap" name="ic_launcher_cell_broadcast" />
啟用 CMAS 密碼
如要啟用 CMAS 密碼 *#*#CMAS#*#* (撥號鍵盤上的 *#*#2627#*#*),撥號器應用程式必須監聽 *#*#code#*#* 形式的特殊撥號器代碼,並使用公開方法 sendDialerSpecialCode
處理該代碼。
區域資訊規定:Channel 50
第 50 頻道是專為電信業者設計的特殊頻道,可播送區域相關資訊 (南非 MTN 除外)。這個管道的廣播訊息不會產生對話方塊或通知。而是會顯示在「設定」選單的 SIM 卡狀態中,或狀態列 (例如顯示郵遞區號)。
Android CellBroadcastService 實作項目支援行動廣播服務中的下列 API,供「設定」和 SysUI 應用程式取得廣播頻道 50 的資訊。如要導入這項功能,請按照下列步驟操作:
透過 RRO 註冊廣播
android.telephony.action.AREA_INFO_UPDATED
,並覆寫接收器套件名稱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 來保留資料 (您可以在後續版本中安全地移除舊版 Cell Broadcast APK)。
在升級為使用 CellBroadcast 模組的裝置上,模組會透過明確定義的 cellbroadcast-legacy
授權,從 AOSP LegacyCellBroadcastApp 或 OEM 定義的 CellBroadcastContentProvider APK 擷取資料。
使用 OEM 定義的 CellBroadcastContentProvider APK
定義 CellBroadcastContentProvider APK 時,該 APK 必須符合下列規格。
這個 APK 是「無標頭」的 APK,只會透過具有
cellbroadcast-legacy
授權的ContentProvider
物件,顯示資料庫和SharedPreferences
的內容,第三方應用程式無法存取。APK 由原始設備製造商 (OEM) 開發及擁有,OEM 可以繼續代管隱藏的 API 架構。
如要將 SharedPreferences
遷移至 CellBroadcast 模組,CellBroadcastContentProvider APK 必須支援 ContentProvider.call
方法,並使用下列參數:
- 發證機構:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
- 方法:
@SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
Arg:
@SystemAPI CellBroadcast.Preference
以下列出 CellBroadcast 模組支援的共用偏好設定鍵。資料來自
SharedPreferences
的ContentProvider.call
方法。
如要將訊息記錄遷移至 CellBroadcast 模組,CellBroadcastContentProvider APK 必須支援 ContentProvider.query
方法,並使用下列參數:
- 授權:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
。查詢資料欄 列出 CellBroadcast 模組支援的訊息屬性。接收ContentProvider.query
方法的資料 (來自資料庫)。
如要瞭解 CellBroadcastContentProvider,
的參考實作方式,請參閱 LegacyCellBroadcastContentProvider
。
測試
Android Compatibility Test Suite (CTS) 會驗證應用程式相依系統 API 的功能。您也可以執行 CellBroadcast 模組 unit tests/testappsp
。
如果原始設備製造商為裝置啟用 CMAS 密碼,該裝置就能支援偵錯模式,並提供下列功能。
測試警報會歸類在「其他警報」下方,並提供開啟/關閉切換按鈕。
記錄會顯示所有已接收但未顯示的訊息,例如重複的訊息或以其他語言撰寫的訊息。
訊息會顯示所有可用參數,包括序號、訊息 ID 和有效期限。
如要啟用偵錯模式,請在撥號器上撥打 *#*#CMAS#*#*。
聯絡資訊
如要進一步瞭解 CellBroadcast 模組或有任何疑問,請與 CellBroadcast 支援團隊聯絡。