小區廣播

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.google.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 設置頁面)。要從 Settings 應用程序啟動 CellBroadcastReceiver 應用程序,請將以下設置配置更改為包名稱com.google.android.cellbroadcastreceiver

<!-- Cell broacast receiver package name [DO NOT TRANSLATE] -->
<string name="cell_broadcast_receiver_package">
com.google.android.cellbroadcastreceiver</string>

與消息傳遞應用程序集成

您可以將應用程序鏈接集成到消息應用程序中以打開 CellBroadcast 消息歷史記錄。在 Android 消息應用程序中,這已集成到設置>高級>緊急警報中。要將鏈接集成到您自己的消息傳遞應用程序中,請在消息傳遞應用程序中定義路徑並將 CellBroadcast 模塊的組件名稱配置為com.google.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 應用程序設置菜單。

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 實現在小區廣播服務中為 Settings 和 SysUI 應用程序提供了對以下 API 的支持,以獲取廣播 Channel 50 信息。要實現這一點,請執行以下操作:

  • 註冊廣播android.telephony.action.AREA_INFO_UPDATED並通過 RRO 覆蓋接收器包名稱config_area_info_receiver_packages

  • 綁定到CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE

由於 Settings 和 SysUI 應用程序超出了 CellBroadcast 模塊的範圍,因此您必須在 SystemUI 或 Settings 應用程序中實現您的更改以提供端到端支持。有關參考實現,請參閱CellBroadcastService 設置應用程序

定制

您不能直接修改 CellBroadcast 模塊的源代碼,但您可以使用運行時資源覆蓋 (RRO)來啟用(或禁用)參數(例如,您可以自定義通知的顏色和對話框上的尺寸)。要覆蓋 CellBroadcast 模塊中使用的參數的默認值,請將目標包名稱更改為com.google.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 支持小組