CellBroadcast 模組可減少原始設備製造商 (OEM) 的重複工作 (進而減少 Android 生態系統中的分散現象,並為使用者提供一致的行為),並有助於簡化電信業者的 CellBroadcast 相關規定測試和認證作業 (因為原始設備製造商無法修改程式碼)。這個模組可更新,也就是說,它可以在 Android 的正常發布週期外,接收功能更新。
套件格式
CellBroadcast 模組包含下列服務和應用程式。
CellBroadcastService 服務支援 CellBroadcast 簡訊解碼、無線緊急警報 (WEA) 3.0 的區域限制、訊息重複檢查,以及向應用程式廣播訊息。這是一種一對多地理目標和地理圍欄訊息服務,旨在同時向特定區域的多位行動電話使用者傳送訊息。這項服務是由 ETSI GSM 委員會 3GPP 定義,屬於電信標準的一部分。
CellBroadcastReceiver 應用程式是預設的系統應用程式,可處理緊急和非緊急警報 (例如琥珀警報和總統警報),並根據電信業者和區域法規,向使用者顯示資訊。
CellBroadcast 訊息流程
下圖顯示 CellBroadcast 訊息流程。
圖 1. CellBroadcastReceiver 訊息流程
無線電介面層 (RIL) 會通知
InBoundSMSHandler
有關 CDMA/GSM 區域廣播簡訊的資訊。該架構會將 CellBroadcast 簡訊轉送至 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 中的資料庫。
平台會將 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 模組,才能提供端對端支援。如需 Android 開放原始碼計畫的參考資料實作資訊,請參閱這個 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
Channel 50 是電信業者用來廣播區域相關資訊的特殊頻道 (南非的 MTN 除外)。對於這個管道,廣播訊息不會產生對話方塊或通知。而是會顯示在「設定」選單的 SIM 卡狀態或狀態列中 (例如,顯示郵遞區號)。
Android CellBroadcastService 實作項目支援以下 API,可讓設定和 SysUI 應用程式取得廣播頻道 50 的資訊。如要實作這項功能,請按照下列步驟操作:
註冊廣播
android.telephony.action.AREA_INFO_UPDATED
,並透過 RRO 覆寫接收器套件名稱config_area_info_receiver_packages
。繫結至
CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE
。
由於 Settings 和 SysUI 應用程式超出 CellBroadcast 模組的範圍,因此您必須在 SystemUI 或「設定」應用程式中實作變更,以提供端對端支援。如需參考實作方式,請參閱 CellBroadcastService 設定應用程式。
自訂
您無法直接修改 CellBroadcast 模組的原始碼,但可以使用執行階段資源覆蓋 (RRO) 啟用 (或停用) 參數 (例如,您可以自訂通知的顏色和對話方塊的尺寸)。如要覆寫 CellBroadcast 模組中使用的參數預設值,請將目標套件名稱變更為 com.android.cellbroadcastreceiver
。並執行下列動作:
如需疊加設定的清單,請參閱
overlayable.xml
。如需實作範例,請參閱 Android 開放原始碼計畫中的
RROSampleTestApp
。
如果實作內容缺少 UI 字串轉譯資源,或是翻譯不符合預期,您可以使用 RRO 覆寫翻譯資源,或與 Google 翻譯團隊合作,將上游字串轉譯為 CellBroadcast 模組。如果您覆寫翻譯資源,Google 必須在 overlayable.xml
中公開這些字串,才能允許覆寫。如果您需要更多 UI 自訂設定,請洽詢 CellBroadcast 支援團隊。
遷移資料
Android 11 包含舊版 CellBroadcast 應用程式,這是一種機制,可為升級至 CellBroadcast 模組的裝置保留及遷移應用程式資料 (包括使用者設定和緊急警報記錄)。使用 CellBroadcast 模組的 Android 實作項目,應在版本中加入舊版 CellBroadcast 應用程式,以便遷移資料。如果您的實作項目使用自訂的 CellBroadcast 解決方案,則應定義 CellBroadcastContentProvider APK 來保留資料 (您可以在後續版本中安全移除舊版 CellBroadcast 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 模組支援的共用偏好設定鍵清單。資料來自
ContentProvider.call
方法的SharedPreferences
。
如要將訊息記錄遷移至 CellBroadcast 模組,CellBroadcastContentProvider APK 必須支援 ContentProvider.query
方法,並使用下列參數:
- Authority:
@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 支援團隊聯絡。