小区广播

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

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 设置页面)。要从 Settings 应用程序启动 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 模块以提供端到端支持。有关 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.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 支持小组