Модуль 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
(без 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.
Рисунок 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 .