Модуль CellBroadcast сокращает рутинные действия OEM-производителей (что, в свою очередь, снижает фрагментацию экосистемы Android и обеспечивает единообразие поведения для конечных пользователей), а также помогает оптимизировать тестирование и сертификацию операторов связи на соответствие требованиям CellBroadcast (поскольку OEM-производители не могут изменять код). Этот модуль является обновляемым, то есть он может получать обновления функциональности вне стандартного цикла выпуска Android.
Формат упаковки
Модуль CellBroadcast состоит из следующей службы и приложения.
Служба CellBroadcastService поддерживает декодирование SMS-сообщений CellBroadcast, геозонирование для оповещения о чрезвычайных ситуациях по беспроводной сети (WEA) 3.0, проверку дублирования сообщений и широковещательную рассылку сообщений в приложения. Это служба обмена сообщениями с геотаргетингом и геозонированием, предназначенная для одновременной доставки сообщений нескольким пользователям мобильных телефонов в определённой зоне. Сервис определён комитетом ETSI GSM ( 3GPP ) и является частью телекоммуникационных стандартов.
Приложение CellBroadcastReceiver — это системное приложение по умолчанию, которое обрабатывает экстренные и неэкстренные оповещения (например, оповещения Amber и президентские оповещения) и предоставляет информацию конечным пользователям в соответствии с правилами оператора связи и региональными нормами.
Поток сообщений CellBroadcast
На следующем рисунке показан поток сообщений CellBroadcast.
Рисунок 1. Поток сообщений CellBroadcastReceiver
Уровень радиоинтерфейса (RIL) уведомляет
InBoundSMSHandler
о SMS-сообщении CDMA/GSM CellBroadcast.Фреймворк пересылает SMS-сообщение CellBroadcast в модуль CBS для анализа и обработки входящего сообщения.
После обработки сообщения CellBroadcastService пересылает намерение системному приложению CellBroadcastReceiver по умолчанию.
Приложение 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.
Платформа предоставляет системному приложению SMS по умолчанию разрешение среды выполнения 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
.
Интеграция с почтовым ящиком SMS
Вы можете включить отображение сообщений CellBroadcast в приложении обмена сообщениями по умолчанию, переопределив следующую конфигурацию с помощью наложения ресурсов времени выполнения.
<item type="bool" name="enable_write_alerts_to_sms_inbox" />
Поскольку предоставление разрешений выходит за рамки модуля CellBroadcast, необходимо предоставить модулю CellBroadcast разрешение AppOpsManager.OP_WRITE_SMS
для обеспечения сквозной поддержки. Реализацию AOSP см. в этом патче SmsApplication.java
.
Запустите приложение CellBroadcastReceiver
Приложение CellBroadcastReceiver имеет следующие точки запуска.
Меню приложения «Настройки».
Приложение (включая сторонние приложения), например приложение для обмена сообщениями, которое ссылается на историю сообщений CellBroadcast.
(Необязательно) Значок запуска на главном экране 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
.
Требование к информации о районе: Канал 50
Канал 50 — это специальный канал, используемый операторами связи для трансляции информации о регионе (за исключением MTN в Южной Африке). На этом канале широковещательные сообщения не вызывают диалоговых окон или уведомлений. Вместо этого широковещательные сообщения отображаются в меню настроек, в разделе статуса SIM-карты или в строке состояния (например, отображая почтовый индекс).
Реализация Android CellBroadcastService обеспечивает поддержку следующих API в службе сотовой связи для приложений «Настройки» и SysUI для получения информации о вещательном канале 50. Для реализации этой функции выполните следующие действия:
Зарегистрируйте широковещательную рассылку
android.telephony.action.AREA_INFO_UPDATED
и переопределите имя пакета приемникаconfig_area_info_receiver_packages
через RRO.Привязать к
CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE
.
Поскольку приложения «Настройки» и «SysUI» выходят за рамки модуля CellBroadcast, для обеспечения сквозной поддержки необходимо реализовать изменения в приложении «SystemUI» или «Настройки». Пример реализации см. в приложении «Настройки CellBroadcastService» .
Настройка
Вы не можете напрямую изменять исходный код модуля CellBroadcast, но можете использовать наложения ресурсов времени выполнения (RRO) для включения (или отключения) параметров (например, можно настроить цвет уведомлений и размеры диалоговых окон). Чтобы переопределить значения параметров по умолчанию, используемые в модуле CellBroadcast, измените имя целевого пакета на com.android.cellbroadcastreceiver
. Кроме того:
Список накладываемых конфигураций см. в файле
overlayable.xml
.Пример реализации можно найти в
RROSampleTestApp
в AOSP.
Если в реализации отсутствуют ресурсы перевода строк пользовательского интерфейса или если переводы не соответствуют вашим ожиданиям, вы можете переопределить ресурсы перевода с помощью RRO или обратиться к команде переводчиков Google для передачи перевода строк в модуль CellBroadcast. В случае переопределения ресурсов перевода Google должен предоставить эти строки в файле overlayable.xml
для возможности переопределения. Если вам требуются дополнительные настройки для настройки пользовательского интерфейса, обратитесь в группу поддержки CellBroadcast .
Перенос данных
В Android 11 включено устаревшее приложение CellBroadcast, которое представляет собой механизм сохранения и переноса данных приложения (включая пользовательские настройки и историю экстренных оповещений) для устройств, обновляемых до модуля CellBroadcast. Реализации Android, использующие модуль CellBroadcast, должны включать устаревшее приложение CellBroadcast в свою сборку для переноса данных. Если в вашей реализации используется собственное решение CellBroadcast, необходимо определить APK-файл CellBroadcastContentProvider для сохранения данных (в следующем выпуске устаревший APK-файл CellBroadcast можно безопасно удалить).
На устройствах, обновленных для использования модуля CellBroadcast, модуль извлекает данные либо из AOSP LegacyCellBroadcastApp, либо из определяемого OEM-производителем CellBroadcastContentProvider APK через четко определенный центр управления cellbroadcast-legacy
.
Используйте APK CellBroadcastContentProvider, определенный OEM-производителем
При определении APK CellBroadcastContentProvider APK должен соответствовать следующим спецификациям.
APK представляет собой headless APK, который отображает только содержимое своей базы данных и
SharedPreferences
через объектContentProvider
с полномочиямиcellbroadcast-legacy
и недоступен для сторонних приложений.APK разрабатывается и принадлежит OEM-производителю, где OEM-производитель может продолжать размещать свою скрытую схему API.
Для переноса SharedPreferences
в модуль CellBroadcast APK-файл CellBroadcastContentProvider должен поддерживать метод ContentProvider.call
со следующими параметрами:
- Источник:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
- Метод:
@SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
Аргумент:
@SystemAPI CellBroadcast.Preference
Это список поддерживаемых общих ключей настроек для модуля CellBroadcast. Данные берутся из
SharedPreferences
для методаContentProvider.call
.
Для переноса истории сообщений в модуль CellBroadcast APK-файл CellBroadcastContentProvider должен поддерживать метод ContentProvider.query
со следующими параметрами:
- Источник:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
. Столбцы запроса содержат список поддерживаемых свойств сообщений для модуля CellBroadcast. Принимает данные (из вашей базы данных) для методаContentProvider.query
.
Для эталонной реализации CellBroadcastContentProvider,
обратитесь к LegacyCellBroadcastContentProvider
.
Тестирование
Набор тестов на совместимость с Android (CTS) проверяет функциональность системных API, зависящих от приложений. Вы также можете запустить unit tests/testappsp
модуля CellBroadcast.
Если производитель оригинального оборудования включил секретный код CMAS для устройства, это устройство может поддерживать режим отладки со следующими функциями.
Тестовые оповещения сгруппированы в разделе «Другие оповещения» с переключателем вкл./выкл.
История включает в себя все сообщения, которые были получены, но не отображены, например дубликаты сообщений или сообщения на другом языке.
В сообщениях отображаются все доступные параметры, включая серийный номер, идентификатор сообщения и дату истечения срока действия.
Чтобы включить режим отладки, наберите *#*#CMAS#*#* на номеронабирателе.
Контакт
Для получения дополнительной информации или вопросов о модуле CellBroadcast обратитесь в группу поддержки CellBroadcast .