小區廣播

CellBroadcast 模組減少了OEM 的重複工作(這反過來又減少了整個Android 生態系統的碎片化,並為最終用戶提供一致的行為),並有助於簡化營運商對CellBroadcast 相關要求的測試和認證(因為OEM 無法修改代碼) )。該模組是可更新的,這意味著它可以在正常的 Android 發布週期之外接收功能更新。

封裝格式

CellBroadcast 模組由以下服務和應用程式組成。

  • CellBroadcastService服務支援 CellBroadcast SMS 解碼、無線緊急警報 (WEA) 3.0 的地理圍欄、訊息重複檢查以及向應用程式廣播訊息。它是一種一對多的地理定位和地理圍欄訊息服務,旨在同時向指定區域內的多個行動電話用戶傳遞訊息。該服務由ETSI GSM 委員會3GPP定義,是電信標準的一部分。

  • CellBroadcastReceiver應用程式是預設系統應用程序,用於處理緊急和非緊急警報(例如安珀警報和總統警報),並根據運營商和地區法規向最終用戶提供資訊。

CellBroadcast訊息流

下圖顯示了 CellBroadcast 訊息流。

CellBroadcastReceiver訊息流

圖 1. CellBroadcastReceiver 訊息流

  1. 無線介面層 (RIL) 通知InBoundSMSHandler有關 CDMA/GSM CellBroadcast SMS 的資訊。

  2. 該框架將 CellBroadcast SMS 轉送到 CBS 模組以解析和處理傳入訊息。

  3. 訊息處理完畢後,CellBroadcastService 將 Intent 轉送至系統預設的 CellBroadcastReceiver 應用程式。

  4. 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 應用程式設定選單。

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 。另外:

如果實作缺少 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 支援小組