CellBroadcast

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

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

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

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

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

Поток сообщений 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 (без API @hide ) и зависит от следующих статических библиотек.

  • 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.

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

Интегрируйте модуль 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 Messaging эта функция интегрирована в «Настройки» > «Дополнительно» > «Экстренное оповещение» . Чтобы интегрировать ссылку в собственное приложение для обмена сообщениями, определите путь в приложении для обмена сообщениями и настройте имя компонента для модуля CellBroadcast как com.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity .

Интеграция с почтовым ящиком SMS

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

<item type="bool" name="enable_write_alerts_to_sms_inbox" />

Поскольку предоставление разрешений выходит за рамки модуля CellBroadcast, необходимо предоставить разрешение AppOpsManager.OP_WRITE_SMS модулю CellBroadcast, чтобы обеспечить сквозную поддержку. Эталонную реализацию AOSP можно найти в этом патче SmsApplication.java .

Запустите приложение CellBroadcastReceiver.

Приложение CellBroadcastReceiver имеет следующие точки запуска.

  • Меню приложения «Настройки».

  • Приложение (включая сторонние приложения), например приложение для сообщений, которое ссылается на историю сообщений CellBroadcast.

  • (Необязательно) Значок запуска на главном экране Android, добавленный OEM-производителем. Подробности см. в разделе Добавление значка запуска .

Настройки приложения 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 в службе сотового вещания для приложений Settings и 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, модуль извлекает данные либо из AOSP LegacyCellBroadcastApp, либо из APK-файла CellBroadcastContentProvider, определенного OEM, через четко определенный центр управления cellbroadcast-legacy .

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

При определении APK CellBroadcastContentProvider APK должен соответствовать этим спецификациям.

  • APK — это автономный 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 .

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

  • Тестовые оповещения сгруппированы в разделе «Другие оповещения» с переключателем включения/выключения.

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

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

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

Контакт

Для получения дополнительной информации или вопросов о модуле CellBroadcast обращайтесь в группу поддержки CellBroadcast .