CellBroadcast

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

Формат упаковки

Модуль CellBroadcast состоит из следующей службы и приложения.

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

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

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

На следующем рисунке показан поток сообщений CellBroadcast.

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

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

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

  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 внутри модуля 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.

Меню настроек приложения 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 .