CellBroadcast 模組減少了OEM 的重複工作(這反過來又減少了整個Android 生態系統的碎片化,並為最終用戶提供一致的行為),並有助於簡化營運商對CellBroadcast 相關要求的測試和認證(因為OEM 無法修改代碼) )。該模組是可更新的,這意味著它可以在正常的 Android 發布週期之外接收功能更新。
封裝格式
CellBroadcast 模組由以下服務和應用程式組成。
CellBroadcastService服務支援 CellBroadcast SMS 解碼、無線緊急警報 (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 模組的範圍,因此您必須向 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 應用程式的小區廣播服務中的以下 API 提供支持,以取得廣播 Channel 50 資訊。若要實現此目的,請執行下列操作:
註冊廣播
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 是一個無頭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
參數:
@SystemAPI CellBroadcast.Preference
這是 CellBroadcast 模組支援的共享首選項鍵的清單。資料來自
ContentProvider.call
方法的SharedPreferences
。
若要將訊息歷史記錄遷移到 CellBroadcast 模組,CellBroadcastContentProvider APK 必須支援具有以下參數的ContentProvider.query
方法:
- 權限:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
。查詢列列出了 CellBroadcast 模組支援的訊息屬性。為ContentProvider.query
方法取得資料(從資料庫中)。
有關CellBroadcastContentProvider,
請參閱LegacyCellBroadcastContentProvider
。
測試
Android 相容性測試套件 (CTS) 驗證依賴應用程式的系統 API 的功能。您也可以執行 CellBroadcast 模組unit tests/testappsp
。
如果 OEM 已為裝置啟用 CMAS 密碼,則該裝置可以支援具有以下功能的偵錯模式。
測試警報分組在其他警報下,並具有開/關切換功能。
歷史記錄包括已接收但未顯示的所有訊息,例如重複訊息或其他語言的訊息。
訊息顯示所有可用參數,包括序號、訊息 ID 和到期日期。
若要啟用偵錯模式,請在撥號器上撥打*#*#CMAS#*#* 。
接觸
有關 CellBroadcast 模組的更多詳細資訊或問題,請聯絡CellBroadcast 支援小組。