細胞廣播

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

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

  • 所述CellBroadcastService服務支持小區廣播SMS解碼,地理圍欄用於無線緊急警報(WEA)3.0,消息的重複檢查,和廣播消息發送到應用程序。它是一種一對多的地理定位和地理圍欄消息服務,旨在同時向指定區域內的多個移動電話用戶發送消息。該服務由所定義的ETSI GSM委員會, 3GPP ,和是的電信標準的一部分。

  • CellBroadcastReceiver應用程序是系統默認的應用程序,處理緊急和非緊急警報(如琥珀和總統警報),並提出了信息基於載波和地區規定的最終用戶。

下圖顯示了 CellBroadcast 消息流。

CellBroadcastReceiver 消息流

圖1. CellBroadcastReceiver消息流

  1. 無線電接口層(RIL)通知InBoundSMSHandler約一個CDMA / GSM小區廣播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

模塊依賴

與框架只用穩定的小區廣播模塊交互@SystemApi (無@hide API)和取決於以下靜態庫。

  • Androidx.legacy_legacy-support-v13
  • Androidx.recyclerview_recyclerview
  • Androidx.preference_preference
  • androidx.legacy_legacy-preference-v14
  • androidx.appcompat_appcompat

您可以使用自定義配置運行時資源重疊(複製權組織)

權限配置

CellBroadcast 模塊使用 Google 簽名而不是平台簽名進行簽名,這意味著該模塊無法訪問簽名權限。相反,Android的11定義了新的簽名許可com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY的小區廣播模塊內;只有模塊中的包才能獲得權限,因為它們使用相同的密鑰進行簽名。此權限允許 CellBroadcastReceiver 應用程序擁有對 CellBroadcastService 內數據庫的完全訪問權限。

該平台授予android.permission.READ_CELL_BROADCASTS運行時權限為默認的系統短信應用程序訪問緊急警報的歷史。

集成 CellBroadcast 模塊

本節介紹如何集成 CellBroadcast 模塊。

與設置集成

你可以決定整合在設置應用小區廣播設置(最終用戶設置>應用和通知>高級>緊急警報進入小區廣播設置頁面)。要啟動從設置應用程序的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短信應用,這已經融入設置>高級>緊急警報。為了整合在自己的即時通訊應用的鏈接,定義短信應用的路徑和小區廣播模塊配置組件名稱com.google.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity

與短信收件箱集成

通過使用運行時資源覆蓋覆蓋以下配置,您可以在默認消息傳遞應用程序中啟用顯示 CellBroadcast 消息。

<item type="bool" name="enable_write_alerts_to_sms_inbox" />

由於授予權限是小區廣播模塊的範圍之內,你必須授予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

區域信息要求:Channel 50

50頻道是運營商廣播區域相關信息的專用頻道(南非MTN除外)。對於此頻道,廣播消息不會導致彈出對話框或通知。相反,廣播消息會出現在“設置”菜單的 SIM 卡狀態或狀態欄中(例如,顯示郵政編碼)。

Android CellBroadcastService 實現為設置和 SysUI 應用程序的小區廣播服務中的以下 API 提供支持,以獲取廣播頻道 50 信息。要實現這一點,請執行以下操作:

  • 註冊廣播android.telephony.action.AREA_INFO_UPDATED和覆蓋接收器組件名稱config_area_info_receiver_packages通過RRO。

  • 綁定到CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE

由於設置和 SysUI 應用程序不在 CellBroadcast 模塊的範圍內,因此您必須在 SystemUI 或設置應用程序中實施更改以提供端到端支持。對於一個參考實現,指CellBroadcastService設置應用

定制

你不能直接修改小區廣播模塊的源代碼,但您可以使用運行時資源重疊(複製權組織)啟用(或禁用)的參數(例如,您可以自定義通知和尺寸的對話框上的顏色)。要覆蓋小區廣播模塊中使用的參數的缺省值,目標包名稱改為com.google.android.cellbroadcastreceiver 。此外:

如果實現缺少 UI 字符串翻譯資源或翻譯不符合您的期望,您可以使用 RRO 覆蓋翻譯資源或與 Google 翻譯團隊合作,將字符串翻譯上游到 CellBroadcast 模塊。如果忽略翻譯資源,谷歌必須揭露那些字符串overlayable.xml允許覆蓋。如果您需要的用戶界面定制更多的配置,伸手向小區廣播支持組

遷移數據

Android 11 包含一個舊版 CellBroadcast 應用,這是一種為升級到 CellBroadcast 模塊的設備保留和遷移應用數據(包括用戶設置和緊急警報歷史記錄)的機制。使用 CellBroadcast 模塊的 Android 實現應在其構建中包含舊版 CellBroadcast 應用程序以進行數據遷移。如果您的實現使用自定義 CellBroadcast 解決方案,您應該定義一個 CellBroadcastContentProvider APK 來保存數據(您可以在後續版本中安全地刪除舊版 CellBroadcast APK)。

上升級為使用小區廣播模塊的設備,該模塊通過良好定義的取從任一AOSP LegacyCellBroadcastApp或OEM定義CellBroadcastContentProvider APK數據cellbroadcast-legacy權限。

在定義 CellBroadcastContentProvider APK 時,該 APK 必須遵循這些規範。

  • 該APK是一具無頭APK即表面只有它的數據庫和內容SharedPreferences通過ContentProvider與對象cellbroadcast-legacy的權威,而不是第三方應用訪問。

  • APK 由 OEM 開發和擁有,OEM 可以在其中繼續託管其隱藏的 API 架構。

要遷移SharedPreferences到小區廣播模塊,所述CellBroadcastContentProvider APK必須支持ContentProvider.call使用以下參數)的方法:

  • 機構: @SystemAPI CellBroadcast.LEGACY_CONTENT_URI
  • 方法: @SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
  • 精氨酸: @SystemAPI CellBroadcast.Preference

    這是 CellBroadcast 模塊支持的共享首選項鍵的列表。該數據來自SharedPreferencesContentProvider.call方法。

要遷移消息歷史的小區廣播模塊,該CellBroadcastContentProvider APK必須支持ContentProvider.query具有以下參數的方法:

  • 管理局: @SystemAPI CellBroadcast.LEGACY_CONTENT_URI 。查詢列列出了 CellBroadcast 模塊支持的消息屬性。發生在數據(從數據庫)的ContentProvider.query方法。

對於一個參考實現CellBroadcastContentProvider,LegacyCellBroadcastContentProvider

測試

Android 兼容性測試套件 (CTS) 驗證依賴於應用的系統 API 的功能。您還可以運行小區廣播模塊unit tests/testappsp

如果OEM已啟用CMAS密碼的設備,該設備可以支持以下功能調試模式。

  • 測試警報具有開/關切換下的其他通知分組。

  • 歷史記錄包括收到但未顯示的所有消息,例如重複消息或其他語言的消息。

  • 消息顯示所有可用參數,包括序列號、消息 ID 和到期日期。

要啟用調試模式,撥*#*#CMAS#*#*在撥號畫面。

接觸

有關詳細信息或有關小區廣播模塊問題,請聯繫小區廣播支持組