Модуль CellBroadcast сокращает количество повторяющихся действий для OEM-производителей (что, в свою очередь, уменьшает фрагментацию экосистемы Android и обеспечивает согласованное поведение для конечных пользователей) и помогает упростить тестирование и сертификацию операторов связи в соответствии с требованиями, связанными с CellBroadcast (поскольку OEM-производители не могут изменить код). ). Этот модуль является обновляемым, то есть он может получать обновления функциональности за пределами обычного цикла выпуска Android.
Формат пакета
Модуль CellBroadcast состоит из следующих сервисов и приложений.
Служба CellBroadcastService поддерживает декодирование SMS CellBroadcast, геозону для оповещения о чрезвычайных ситуациях в беспроводной сети (WEA) 3.0, проверку дублирования сообщений и широковещательную рассылку сообщений приложениям. Это служба обмена сообщениями с геотаргетингом и геозоной «один ко многим», предназначенная для одновременной доставки сообщений нескольким пользователям мобильных телефонов в определенной области. Услуга определяется комитетом ETSI GSM, 3GPP , и является частью телекоммуникационных стандартов.
Приложение CellBroadcastReceiver — это системное приложение по умолчанию, которое обрабатывает экстренные и неэкстренные оповещения (например, желтые и президентские оповещения) и предоставляет информацию конечным пользователям в соответствии с операторскими и региональными правилами.
Поток сообщений CellBroadcast
На следующем рисунке показан поток сообщений CellBroadcast.
Рисунок 1. Поток сообщений CellBroadcastReceiver
Уровень радиоинтерфейса (RIL) уведомляет
InBoundSMSHandler
о SMS CDMA/GSM CellBroadcast.Платформа перенаправляет SMS CellBroadcast в модуль CBS для анализа и обработки входящего сообщения.
После обработки сообщения CellBroadcastService перенаправляет намерение в системное приложение CellBroadcastReceiver по умолчанию.
Приложение CellBroadcastReceiver отображает сообщение пользователю.
Формат модуля
CellBroadcastService и приложение CellBroadcastReceiver включены в один файл APEX ( com.google.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.
Платформа предоставляет разрешение среды выполнения android.permission.READ_CELL_BROADCASTS
системному приложению SMS по умолчанию для доступа к истории экстренных предупреждений.
Интеграция модуля CellBroadcast
В этом разделе описывается, как интегрировать модуль CellBroadcast.
Интеграция с настройками
Вы можете решить, куда интегрировать настройки CellBroadcast в приложении «Настройки» (конечные пользователи получают доступ к странице настроек CellBroadcast из « Настройки » > « Приложения и уведомления » > « Дополнительно» > «Экстренное оповещение» ). Чтобы запустить приложение CellBroadcastReceiver из приложения «Настройки», измените следующие конфигурации параметров, указав имя пакета com.google.android.cellbroadcastreceiver
.
<!-- Cell broacast receiver package name [DO NOT TRANSLATE] -->
<string name="cell_broadcast_receiver_package">
com.google.android.cellbroadcastreceiver</string>
Интеграция с мессенджерами
Вы можете интегрировать ссылку на приложение в приложения для обмена сообщениями, чтобы открыть историю сообщений CellBroadcast. В приложении Android Messaging это интегрировано в « Настройки » > « Дополнительно » > « Экстренное оповещение ». Чтобы интегрировать ссылку в собственное приложение для обмена сообщениями, определите путь в приложении для обмена сообщениями и настройте имя компонента для модуля CellBroadcast как com.google.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-карты меню «Настройки» или в строке состояния (например, отображая почтовый индекс).
Реализация CellBroadcastService для Android обеспечивает поддержку следующих 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.google.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 .