一、背景
Android R及以上版本,必须集成Google Cellbroadcast。
CellBroadcast模块由两部分组成:
- CellBroadcastService
此服务支持CellBroadcast SMS解码,无线紧急警报(WEA)3.0的地理围栏,消息重复检查以及向应用程序广播消息。 - CellBroadcastReceiver:
默认系统应用程序,用于处理紧急/非紧急警报,并根据运营商和区域法规向最终用户显示信息。
CellBroadcastService和CellBroadcastReceiver应用程序包含在单个APEX文件(com.google.android.cellbroadcast)中,OEMs无法修改。但是OEMs可以使用runtime resource overlays覆盖(RRO)自定义配置。
在Android R中,CellBroadcast模块在package/app/CellBroadcastReceiver中包含代码,并将现有框架类迁移到package/modules/CellBroadcastService。也就是说,可以在这两个部分查看代码,修改无效。
二、模块介绍
小区广播(CB)是一对多的地理定位和地理防御消息服务,旨在将消息同时发送到定义区域中的多个移动电话用户。
当警报信息到来,设备会立即弹出警报框:
三、CellBroadcast消息流程
1)无线电接口层(RIL)向InBoundSMSHandler通知CDMA / GSM CellBroadcast SMS。
2)framework将CellBroadcast SMS转发到CBS模块,以解析和处理传入的消息。
3)处理完消息后,CellBroadcastService会将intent转发到系统默认的CellBroadcastReceiver应用程序。
4)CellBroadcastReceiver应用程序将消息显示给用户。
四、CellBroadcast RRO
OEMs无法直接修改源码,但是可以参考RROSampleTestApp使用runtime resource overlays覆盖(RRO)自定义配置(仅overlayable.xml文件中定义的)。
注意事项:必须设置targetPackage为“com.google.android.cellbroadcastreceiver”
五、CellBroadcast Settings解析
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference android:key="alerts_header"
android:summary="@string/alerts_header_summary"
android:selectable="false" />
<!-- Allow alerts -->
<SwitchPreference android:defaultValue="@bool/master_toggle_enabled_default"
android:key="enable_alerts_master_toggle"
android:summary="@string/enable_alerts_master_toggle_summary"
android:title="@string/enable_alerts_master_toggle_title" />
<!--Alerts -->
<PreferenceCategory android:title="@string/emergency_alerts_title"
android:key="category_emergency_alerts">
<!-- Emergency alerts -->
<SwitchPreference android:defaultValue="@bool/emergency_alerts_enabled_default"
android:key="enable_emergency_alerts"
android:summary="@string/enable_emergency_alerts_message_summary"
android:title="@string/enable_emergency_alerts_message_title" />
<!-- Presidential alerts -->
<SwitchPreference android:defaultValue="true"
android:enabled="false"
android:key="enable_cmas_presidential_alerts"
android:summary="@string/enable_cmas_presidential_alerts_summary"
android:title="@string/enable_cmas_presidential_alerts_title"/>
<!-- Extreme threats -->
<SwitchPreference android:defaultValue="@bool/extreme_threat_alerts_enabled_default"
android:key="enable_cmas_extreme_threat_alerts"
android:summary="@string/enable_cmas_extreme_threat_alerts_summary"
android:title="@string/enable_cmas_extreme_threat_alerts_title" />
<!-- Severe threats -->
<SwitchPreference android:defaultValue="@bool/severe_threat_alerts_enabled_default"
android:key="enable_cmas_severe_threat_alerts"
android:summary="@string/enable_cmas_severe_threat_alerts_summary"
android:title="@string/enable_cmas_severe_threat_alerts_title" />
<!-- AMBER alerts -->
<SwitchPreference android:defaultValue="@bool/amber_alerts_enabled_default"
android:key="enable_cmas_amber_alerts"
android:summary="@string/enable_cmas_amber_alerts_summary"
android:title="@string/enable_cmas_amber_alerts_title" />
<!-- Public safety messages -->
<SwitchPreference android:defaultValue="@bool/public_safety_messages_enabled_default"
android:key="enable_public_safety_messages"
android:summary="@string/enable_public_safety_messages_summary"
android:title="@string/enable_public_safety_messages_title" />
<!-- State and local tests -->
<SwitchPreference android:defaultValue="@bool/state_local_test_alerts_enabled_default"
android:key="enable_state_local_test_alerts"
android:summary="@string/enable_state_local_test_alerts_summary"
android:title="@string/enable_state_local_test_alerts_title" />
<!-- Test alerts -->
<SwitchPreference android:defaultValue="@bool/test_alerts_enabled_default"
android:key="enable_test_alerts"
android:summary=