CellBroadcast

Модуль CellBroadcast позволяет производителям устройств не выполнять повторяющиеся действия (что, в свою очередь, уменьшает фрагментацию экосистемы Android и обеспечивает единообразное поведение для конечных пользователей), а также упрощает тестирование и сертификацию операторами связи требований, связанных с CellBroadcast (поскольку код не может быть изменен производителями устройств). Этот модуль можно обновлять, то есть его функции могут получать обновления вне обычного цикла выпуска Android.

Формат пакета

Модуль CellBroadcast состоит из следующих сервиса и приложения:

  • Сервис CellBroadcastService поддерживает декодирование SMS-сообщений CellBroadcast, геозонирование для экстренных оповещений по беспроводному каналу (WEA) 3.0, проверку на дублирование сообщений и их передачу в приложения. Это сервис для обмена сообщениями один ко многим с геотаргетингом и геозонированием, предназначенный для доставки сообщений нескольким пользователям мобильных телефонов в определенной области одновременно. Сервис определяется комитетом ETSI GSM, 3GPP и является частью телекоммуникационных стандартов.

  • Приложение CellBroadcastReceiver – это системное приложение по умолчанию, которое обрабатывает оповещения о чрезвычайных ситуациях и другие оповещения (например, о пропаже детей и президентские оповещения) и показывает информацию конечным пользователям в соответствии с правилами оператора связи и региональными нормативными требованиями.

Порядок отправки сообщений CellBroadcast

На рисунке ниже показан поток сообщений CellBroadcast.

Поток сообщений CellBroadcastReceiver

Рисунок 1. Поток сообщений CellBroadcastReceiver

  1. Уровень интерфейса радио (RIL) уведомляет InBoundSMSHandler о широковещательном SMS CDMA/GSM.

  2. Фреймворк пересылает SMS CellBroadcast в модуль CBS для анализа и обработки входящего сообщения.

  3. После обработки сообщения CellBroadcastService пересылает намерение приложению 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 новое разрешение на подпись com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY определяется внутри модуля CellBroadcast. Получить разрешение могут только пакеты в модуле, поскольку они подписаны одним и тем же ключом. Это разрешение позволяет приложению CellBroadcastReceiver иметь полный доступ к базе данных в CellBroadcastService.

Платформа предоставляет приложению для обмена SMS, установленному по умолчанию, динамическое разрешение android.permission.READ_CELL_BROADCASTS на доступ к истории экстренных оповещений.

Интеграция модуля 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.

Меню настроек приложения 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-карты" или в строке состояния (например, в виде почтового индекса).

Реализация CellBroadcastService в Android поддерживает следующие 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. Если вы используете собственное решение для оповещения населения, определите APK-файл CellBroadcastContentProvider, чтобы сохранить данные (вы можете безопасно удалить устаревший APK-файл оповещения населения в последующей версии).

На устройствах, обновленных для использования модуля CellBroadcast, модуль получает данные из приложения AOSP LegacyCellBroadcastApp или APK CellBroadcastContentProvider, определенного OEM-производителем, через хорошо определенный орган cellbroadcast-legacy.

Используйте APK-файл CellBroadcastContentProvider, определенный OEM-производителем

При определении APK-файла CellBroadcastContentProvider необходимо соблюдать следующие требования:

  • APK является безынтерфейсным и предоставляет доступ только к содержимому своей базы данных и SharedPreferences через объект ContentProvider с полномочиями cellbroadcast-legacy. Сторонние приложения не могут получить доступ к этому APK.

  • APK-файл разрабатывается и принадлежит производителю оборудования, который может продолжать размещать в нем свою скрытую схему 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 Compatibility Test Suite (CTS) проверяет функциональность системных API, от которых зависит работа приложений. Вы также можете запустить модуль CellBroadcast unit tests/testappsp.

Если производитель оригинального оборудования включил секретный код CMAS для устройства, оно может поддерживать режим отладки со следующими функциями:

  • Тестовые оповещения сгруппированы в разделе Другие оповещения, где их можно включить или отключить.

  • В историю включаются все полученные, но не показанные сообщения, например дубликаты или письма на другом языке.

  • В сообщениях будут указаны все доступные параметры, в том числе серийный номер, идентификатор сообщения и срок действия.

Чтобы включить режим отладки, наберите *#*#CMAS#*#* в приложении "Телефония".

Контакт

Если у вас есть вопросы о модуле CellBroadcast, обратитесь в группу поддержки CellBroadcast.