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 (без 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.

Платформа предоставляет системному приложению 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 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 .

Поскольку приложения Settings и SysUI выходят за рамки модуля CellBroadcast, вам необходимо реализовать свои изменения в SystemUI или приложении Settings, чтобы обеспечить сквозную поддержку. Для справочной реализации обратитесь к приложению CellBroadcastService Settings .

Настройка

Вы не можете напрямую изменять исходный код модуля 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 Cell Broadcast в последующем выпуске).

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

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

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

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

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

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

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

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

Контакт

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