Transmisión móvil

El módulo CellBroadcast reduce los esfuerzos repetitivos de los OEMs (lo que, a su vez, reduce la fragmentación en el ecosistema de Android y proporciona un comportamiento coherente a los usuarios finales) y ayuda a optimizar las pruebas y la certificación de operadores para los requisitos relacionados con CellBroadcast (ya que los OEMs 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 lanzamiento de Android.

Formato del paquete

El módulo CellBroadcast consta del siguiente servicio y app.

  • El servicio CellBroadcastService admite la decodificación de SMS de CellBroadcast, el geovallado 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 de uno a muchos con segmentación geográfica y geovallado diseñado para enviar mensajes a varios usuarios de teléfonos celulares, en un área definida, al mismo tiempo. El servicio lo define el comité GSM de ETSI, 3GPP, y forma parte de los estándares de telecomunicaciones.

  • La app de CellBroadcastReceiver es una app predeterminada del sistema que controla las alertas de emergencia y de otro tipo (como las alertas ámbar y presidenciales), y presenta la información a los usuarios finales según las reglamentaciones regionales y del operador.

Flujo de mensajes de emisión móvil

En la siguiente figura, se muestra el flujo de mensajes de CellBroadcast.

Flujo de mensajes de CellBroadcastReceiver

Figura 1: Flujo de mensajes de CellBroadcastReceiver

  1. La capa de interfaz de radio (RIL) notifica a InBoundSMSHandler sobre un SMS de CellBroadcast de CDMA/GSM.

  2. El framework reenvía el SMS de CellBroadcast al módulo CBS para analizar y procesar el mensaje entrante.

  3. Después de que se procesa el mensaje, CellBroadcastService reenvía el intent a la app predeterminada del sistema CellBroadcastReceiver.

  4. 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 que ejecutan Android 11 o versiones posteriores. El módulo incluye código en package/app/CellBroadcastReceiver y migra las clases de framework existentes a packages/modules/CellBroadcastService.

Dependencias de módulos

El módulo CellBroadcast interactúa con el framework solo con @SystemApi estable (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 del entorno de ejecución (RRO).

Configuración de permisos

El módulo CellBroadcast está firmado con una firma de Google en lugar de una firma de plataforma, lo que significa que el módulo pierde 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 si se firman 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 del sistema predeterminada para acceder al historial de alertas de emergencia.

Integrar el módulo CellBroadcast

En esta sección, se describe cómo integrar el módulo CellBroadcast.

Cómo realizar la 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 > Avanzado > 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 del paquete com.android.cellbroadcastreceiver.

<!-- Cell broacast receiver package name [DO NOT TRANSLATE] -->
<string name="cell_broadcast_receiver_package">
com.android.cellbroadcastreceiver</string>

Cómo realizar la integración con apps de mensajería

Puedes integrar un vínculo de app en 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 > Configuración avanzada > Alerta de emergencia. Para integrar un vínculo en tu propia app de mensajería, define la ruta de acceso en esa app y configura el nombre del componente del módulo CellBroadcast como com.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity.

Cómo realizar la integración con la carpeta Recibidos de SMS

Para habilitar la visualización de mensajes de CellBroadcast en la app de mensajería predeterminada, anula 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" />

Debido a que otorgar permisos está fuera del alcance del módulo CellBroadcast, debes otorgar el permiso AppOpsManager.OP_WRITE_SMS al módulo CellBroadcast para proporcionar asistencia de extremo a extremo. Para obtener una implementación de referencia del AOSP, consulta este parche de SmsApplication.java.

Inicia la app de CellBroadcastReceiver.

La app de CellBroadcastReceiver tiene los siguientes puntos de inicio.

  • Menú de la app de Configuración.

  • Una app (incluidas las de terceros), como una app de mensajes que vincula al historial de mensajes de CellBroadcast

  • (Opcional) Un ícono de inicio de la pantalla principal de Android que agrega el OEM Para obtener más información, consulta Agrega un ícono de lanzamiento.

Configuración de la app de CellBroadcastReceiver

Las siguientes capturas de pantalla muestran el menú de configuración de la app CellBroadcastReceiver.

Menú de configuración de la app de CellBroadcastReceiver

Figura 2: Menú de configuración de la app de CellBroadcastReceiver

Historial de alertas de emergencia

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 apps 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 de 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 de CMAS

Para habilitar el código secreto de CMAS, *#*#CMAS#*#* (*#*#2627#*#* en el teclado), una app de teléfono debe escuchar el código de teléfono especial en forma de *#*#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 las empresas de transporte público 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 su lugar, los mensajes de transmisión aparecen en el estado de SIM del menú de configuración o en la barra de estado (por ejemplo, cuando se muestra un código postal).

La implementación de Android CellBroadcastService proporciona compatibilidad con las siguientes APIs en el servicio de transmisión celular para que las apps de Configuración y SysUI obtengan la información del canal de transmisión 50. Para implementar esto, haz lo siguiente:

  • Registra el android.telephony.action.AREA_INFO_UPDATED de transmisión y anula el nombre del paquete del receptor config_area_info_receiver_packages a través de una RRO.

  • Vincula a CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE.

Debido a que las apps de Settings y SysUI están fuera del alcance del módulo CellBroadcast, debes implementar los cambios en SystemUI o en la app de Settings para brindar asistencia de extremo a extremo. 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 CellBroadcast, pero puedes usar superposiciones de recursos de 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 utilizados 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 opciones de configuración que se pueden superponer, consulta overlayable.xml.

  • Para ver una implementación de ejemplo, consulta RROSampleTestApp en AOSP.

Si faltan recursos de traducción de cadenas de la IU en la implementación o si las traducciones no cumplen con tus expectativas, puedes anular los recursos de traducción con una RRO o trabajar con el equipo de traducción de Google para realizar traducciones de cadenas ascendentes al módulo 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 parámetros de configuración para la personalización de la IU, comunícate con el grupo de asistencia de CellBroadcast.

Migrar los datos

Android 11 incluye una app heredada de CellBroadcast, que es un mecanismo para preservar y migrar los datos de la app (incluidos los parámetros de configuración del usuario y los historiales de alertas de emergencia) para los dispositivos que se actualizan al módulo 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 preservar los datos (puedes quitar de forma segura el APK de transmisión celular heredado en una versión posterior).

En los dispositivos actualizados para usar el módulo CellBroadcast, este recupera datos de LegacyCellBroadcastApp de AOSP o del APK de CellBroadcastContentProvider definido por el OEM 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 cabeza que muestra solo el contenido de su base de datos y SharedPreferences a través de un objeto ContentProvider con la autoridad cellbroadcast-legacy, y las apps de terceros no pueden acceder a él.

  • El OEM desarrolla y es propietario del 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
  • Arg: @SystemAPI CellBroadcast.Preference

    Esta es una lista de claves de preferencias compartidas admitidas para el módulo CellBroadcast. Los datos provienen de SharedPreferences para el método ContentProvider.call.

Para migrar el historial de mensajes al módulo CellBroadcast, el APK de CellBroadcastContentProvider debe admitir el método ContentProvider.query con los siguientes parámetros:

  • Autoridad: @SystemAPI CellBroadcast.LEGACY_CONTENT_URI. Las columnas de consulta enumeran las propiedades de mensaje compatibles para el módulo CellBroadcast. Toma datos (de tu base de datos) para el método ContentProvider.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 del CMAS para un dispositivo, ese dispositivo puede 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/desactivación.

  • El historial incluye todos los mensajes que se recibieron, pero que no se mostraron, como mensajes duplicados o en otro idioma.

  • Los mensajes 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 tienes más detalles o preguntas sobre el módulo CellBroadcast, comunícate con el grupo de asistencia de CellBroadcast.