El módulo de CellBroadcast reduce los esfuerzos repetitivos de los OEM (lo que, a su vez, reduce la fragmentación en todo el ecosistema de Android y proporciona un comportamiento coherente a los usuarios finales) y ayuda a optimizar las pruebas y la certificación de los operadores para los requisitos relacionados con CellBroadcast (porque los OEM no pueden modificar el código). Este módulo se puede actualizar, lo que significa que puede recibir actualizaciones de funcionalidad fuera del ciclo normal de lanzamientos de Android.
Formato del paquete
El módulo de CellBroadcast consta de la siguiente app y servicio.
El servicio CellBroadcastService admite la decodificación de SMS de CellBroadcast, la delimitación geográfica para la alerta de emergencia inalámbrica (WEA) 3.0, las verificaciones de duplicación de mensajes y la transmisión de mensajes a las apps. Es un servicio de mensajería con segmentación geográfica y delimitación geográfica de uno a varios, diseñado para enviar mensajes a varios usuarios de teléfonos celulares en un área definida al mismo tiempo. El servicio está definido por el comité de GSM de ETSI, 3GPP y forma parte de los estándares de telecomunicaciones.
La app de CellBroadcastReceiver es una app del sistema predeterminada que controla las alertas de emergencia y no emergencia (como las alertas ámbar y presidenciales) y presenta la información a los usuarios finales según las reglamentaciones regionales y de la empresa de telefonía celular.
Flujo de mensajes de CellBroadcast
En la siguiente figura, se muestra el flujo de mensajes de CellBroadcast.
Figura 1: Flujo de mensajes de CellBroadcastReceiver
La capa de interfaz de radio (RIL) notifica a
InBoundSMSHandler
sobre un SMS de CellBroadcast de CDMA/GSM.El framework reenvía el SMS de CellBroadcast al módulo de CBS para analizar y procesar el mensaje entrante.
Después de procesar el mensaje, CellBroadcastService reenvía el intent a la app predeterminada del sistema CellBroadcastReceiver.
La app de CellBroadcastReceiver muestra el mensaje al usuario.
Formato del módulo
CellBroadcastService y la app de CellBroadcastReceiver se incluyen en un solo archivo APEX (com.android.cellbroadcast
), que está disponible para dispositivos con Android 11 o versiones posteriores. El módulo incluye código en package/app/CellBroadcastReceiver
y migra las clases existentes del framework a packages/modules/CellBroadcastService
.
Dependencias de módulos
El módulo de CellBroadcast interactúa con el framework solo con @SystemApi
estables (sin APIs de @hide
) y depende de las siguientes bibliotecas estáticas.
Androidx.legacy_legacy-support-v13
Androidx.recyclerview_recyclerview
Androidx.preference_preference
androidx.legacy_legacy-preference-v14
androidx.appcompat_appcompat
Puedes personalizar la configuración con superposiciones de recursos de tiempo de ejecución (RRO).
Configuración de permisos
El módulo de CellBroadcast está firmado con una firma de Google en lugar de una firma de plataforma, lo que significa que el módulo pierde el acceso a los permisos de firma.
En cambio, Android 11 define el nuevo permiso de firma com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY
dentro del módulo CellBroadcast. Solo los paquetes del módulo pueden obtener el permiso, ya que están firmados con la misma clave. Este permiso permite que la app de CellBroadcastReceiver tenga acceso completo a la base de datos dentro de CellBroadcastService.
La plataforma otorga el permiso de tiempo de ejecución android.permission.READ_CELL_BROADCASTS
a la app de SMS predeterminada del sistema para acceder al historial de alertas de emergencia.
Integra el módulo de CellBroadcast
En esta sección, se describe cómo integrar el módulo de CellBroadcast.
Integración con Configuración
Puedes decidir dónde integrar la configuración de CellBroadcast en la app de Configuración (los usuarios finales acceden a la página de configuración de CellBroadcast desde Configuración > Apps y notificaciones > Avanzada > Alerta de emergencia). Para iniciar la app de CellBroadcastReceiver desde la app de Configuración, cambia los siguientes parámetros de configuración con el nombre de paquete com.android.cellbroadcastreceiver
.
<!-- Cell broacast receiver package name [DO NOT TRANSLATE] -->
<string name="cell_broadcast_receiver_package">
com.android.cellbroadcastreceiver</string>
Integración con apps de mensajería
Puedes integrar un vínculo de la app en las apps de mensajería para abrir el historial de mensajes de CellBroadcast. En la app de Mensajes de Android, esta función se integró en Configuración > Opciones avanzadas > Alerta de emergencia. Para integrar un vínculo en tu propia app de mensajería, define la ruta de acceso en la app de mensajería y configura el nombre del componente para el módulo de CellBroadcast como com.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity
.
Integración con la carpeta de Recibidos de SMS
Puedes habilitar la visualización de mensajes de CellBroadcast en la app de mensajería predeterminada anulando la siguiente configuración con una superposición de recursos de tiempo de ejecución.
<item type="bool" name="enable_write_alerts_to_sms_inbox" />
Dado que el otorgamiento de permisos está fuera del alcance del módulo de CellBroadcast, debes otorgar el permiso AppOpsManager.OP_WRITE_SMS
al módulo de CellBroadcast para brindar asistencia integral. Para obtener una implementación de referencia de AOSP, consulta este parche de SmsApplication.java
.
Inicia la app de CellBroadcastReceiver
La app de CellBroadcastReceiver tiene los siguientes puntos de inicio.
El menú de la app de Configuración
Una app (incluidas las de terceros), como una app de mensajes, que se vincula al historial de mensajes de CellBroadcast.
(Opcional) Ícono de inicio de la pantalla principal de Android agregado por el OEM. Para obtener más información, consulta Cómo agregar un ícono de inicio.
Configuración de la app de CellBroadcastReceiver
En las siguientes capturas de pantalla, se muestra el menú de configuración de la app de CellBroadcastReceiver.
Figura 2: Menú de configuración de la app de CellBroadcastReceiver
Figura 3: Pantalla del historial de alertas de emergencia
Agrega íconos de inicio
Puedes habilitar el acceso al historial de mensajes de CellBroadcast desde el selector de aplicaciones y a través de tus propios íconos de inicio.
Para habilitar el acceso al historial de mensajes desde el selector de aplicaciones, anula la siguiente configuración con un RRO.
<item type="bool" name="show_message_history_in_launcher" />
Para anular el ícono predeterminado del AOSP, anula la siguiente configuración con un RRO.
<!-- Customize launcher icon for cellbroadcast history --> <item type="mipmap" name="ic_launcher_cell_broadcast" />
Habilita el código secreto del CMAS
Para habilitar el código secreto de CMAS, *#*#CMAS#*#* (*#*#2627#*#* en el teclado de marcado), una app de marcado debe escuchar el código especial de marcado en el formato *#*#code#*#* y controlar el código con el método público sendDialerSpecialCode
.
Requisito de información del área: Canal 50
El canal 50 es un canal especial para que los operadores transmitan información relacionada con el área (excepto MTN en Sudáfrica). En este canal, los mensajes de transmisión no generan un diálogo ni una notificación. En cambio, los mensajes de transmisión aparecen en el estado de la SIM del menú Configuración o en la barra de estado (por ejemplo, se muestra un código postal).
La implementación de CellBroadcastService de Android proporciona compatibilidad con las siguientes APIs en el servicio de transmisión por celda para que las apps de Configuración y SysUI obtengan la información del canal 50 de transmisión. Para implementar esto, haz lo siguiente:
Registra la emisión
android.telephony.action.AREA_INFO_UPDATED
y anula el nombre del paquete del receptorconfig_area_info_receiver_packages
a través de un RRO.Vincula a
CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE
.
Dado que las apps de Configuración y SysUI están fuera del alcance del módulo CellBroadcast, debes implementar tus cambios en la app de SystemUI o Configuración para brindar compatibilidad integral. Para obtener una implementación de referencia, consulta la app de Configuración de CellBroadcastService.
Personalización
No puedes modificar directamente el código fuente del módulo de CellBroadcast, pero puedes usar superposiciones de recursos en tiempo de ejecución (RRO) para habilitar (o inhabilitar) parámetros (por ejemplo, puedes personalizar el color de las notificaciones y las dimensiones en los diálogos). Para anular los valores predeterminados de los parámetros que se usan en el módulo CellBroadcast, cambia el nombre del paquete de destino a com.android.cellbroadcastreceiver
. A su vez:
Para obtener una lista de las configuraciones que se pueden superponer, consulta
overlayable.xml
.Para ver un ejemplo de implementación, consulta
RROSampleTestApp
en AOSP.
Si faltan recursos de traducción de cadenas de IU en la implementación o si las traducciones no cumplen con tus expectativas, puedes anular los recursos de traducción con un RRO o trabajar con el equipo de traducción de Google para enviar las traducciones de cadenas al módulo de CellBroadcast. Si anulas los recursos de traducción, Google debe exponer esas cadenas en overlayable.xml
para permitir la anulación. Si necesitas más configuraciones para personalizar la IU, comunícate con el grupo de asistencia al cliente de CellBroadcast.
Migrar los datos
Android 11 incluye una app de CellBroadcast heredada, que es un mecanismo para conservar y migrar los datos de la app (incluida la configuración del usuario y los historiales de alertas de emergencia) para los dispositivos que se actualizan al módulo de CellBroadcast. Las implementaciones de Android que usan el módulo CellBroadcast deben incluir la app heredada de CellBroadcast en su compilación para la migración de datos. Si tu implementación usa una solución de CellBroadcast personalizada, debes definir un APK de CellBroadcastContentProvider para conservar los datos (puedes quitar de forma segura el APK de CellBroadcast heredado en una versión posterior).
En los dispositivos actualizados para usar el módulo CellBroadcast, el módulo recupera datos del APK de CellBroadcastContentProvider definido por el OEM o de LegacyCellBroadcastApp de AOSP a través de la autoridad cellbroadcast-legacy
bien definida.
Usa un APK de CellBroadcastContentProvider definido por el OEM
Cuando se define un APK de CellBroadcastContentProvider, este debe seguir estas especificaciones.
El APK es un APK sin encabezado que solo muestra el contenido de su base de datos y
SharedPreferences
a través de un objetoContentProvider
con la autoridadcellbroadcast-legacy
, y no es accesible para apps de terceros.El OEM desarrolla y posee el APK, y puede seguir alojando su esquema de API oculto.
Para migrar SharedPreferences
al módulo CellBroadcast, el APK de CellBroadcastContentProvider debe admitir el método ContentProvider.call
) con los siguientes parámetros:
- Autoridad:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
- Método:
@SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
Argumento:
@SystemAPI CellBroadcast.Preference
Esta es una lista de las claves de preferencias compartidas admitidas para el módulo de CellBroadcast. Los datos provienen de
SharedPreferences
para el métodoContentProvider.call
.
Para migrar el historial de mensajes al módulo de CellBroadcast, el APK de CellBroadcastContentProvider debe admitir el método ContentProvider.query
con los siguientes parámetros:
- Autoridad:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
. Enumera las propiedades de mensajes admitidas para el módulo CellBroadcast. Toma datos (de tu base de datos) para el métodoContentProvider.query
.
Para obtener una implementación de referencia de CellBroadcastContentProvider,
, consulta LegacyCellBroadcastContentProvider
.
Prueba
El Conjunto de pruebas de compatibilidad (CTS) de Android verifica la funcionalidad de las APIs del sistema que dependen de la app. También puedes ejecutar el módulo CellBroadcast unit tests/testappsp
.
Si el OEM habilitó el código secreto de CMAS para un dispositivo, este podrá admitir el modo de depuración con las siguientes funciones.
Las alertas de prueba se agrupan en Otras alertas con un botón de activación o desactivación.
El historial incluye todos los mensajes que se recibieron, pero no se mostraron, como los mensajes duplicados o los mensajes en otro idioma.
En los mensajes, se muestran todos los parámetros disponibles, incluidos el número de serie, el ID del mensaje y la fecha de vencimiento.
Para habilitar el modo de depuración, marca *#*#CMAS#*#* en el marcador.
Contacto
Si deseas obtener más detalles o tienes preguntas sobre el módulo de CellBroadcast, comunícate con el grupo de asistencia de CellBroadcast.