Implementa indicaciones de emergencia

Todos los dispositivos móviles que se vendan en India a partir del 1 de enero de 2017 deben incluir un botón de pánico para cumplir con los requisitos del Departamento de Telecomunicaciones (DoT) de India. Para abordar estos requisitos reglamentarios, Android incluye una implementación de referencia de la función de asistencia en caso de emergencia para habilitar un botón de pánico en dispositivos Android.

Esta función está habilitada de forma predeterminada en Android 8.0 y versiones posteriores, pero debe aplicarse a las compilaciones existentes de versiones anteriores. Esta función está dirigida exclusivamente a los dispositivos que se venden en el mercado de la India, pero se puede incluir en todos los dispositivos que se venden en todo el mundo, ya que no tiene efecto fuera de la India.

Ejemplos y fuente

La función de asistencia en caso de emergencia se implementa en el proyecto frameworks/base del Proyecto de código abierto de Android (AOSP). Está disponible en la rama de la versión más reciente de Android y está habilitado de forma predeterminada en Android 8.0 y versiones posteriores.

Esta función está disponible en las siguientes ramas y confirmaciones. Esta información se proporciona para permitir que los fabricantes de dispositivos apliquen los cambios necesarios a sus compilaciones existentes. Los fabricantes de dispositivos que deseen implementar la función de referencia de AOSP de Emergency Affordance pueden seleccionar los commits de las ramas aplicables en sus propias compilaciones.

Tabla 1: Cherry-picks para la función de referencia de AOSP Emergency Affordance

Branch Confirmaciones
android-latest-release e0c3c66 Se agregó la función de acceso de emergencia
42a4338 Se agregaron traducciones para la cadena de acción de emergencia
4df8d64 Se solucionó un problema por el que la función de acceso de emergencia se mostraba en tablets
nougat-dev e6680d9 Se agregó la función de asistencia de emergencia
95e1865 Se agregaron traducciones para la cadena de acción de emergencia
a70bb89 Se solucionó un problema por el que la función de asistencia de emergencia se mostraba en tablets
marshmallow-dev cd22634 Se agregó la función de acceso de emergencia
13f51c6 Se agregaron traducciones para la cadena de acción de emergencia
6531666 Se corrigió un problema por el que la función de acceso de emergencia se mostraba en tablets
lollipop-mr1-dev 5fbc86b Se agregó la función de acceso de emergencia
1b60879 Se agregaron traducciones para la cadena de acción de emergencia
d74366f Se corrigió un problema por el que la función de acceso de emergencia se mostraba en tablets

Implementación

La función de Asequibilidad en caso de emergencia no realiza cambios en las APIs expuestas a través del kit de desarrollo de software (SDK) de Android. Cuando se habilita y activa, la función proporciona dos activadores que pueden iniciar una llamada de emergencia al 112, que es el único número de emergencia que se debe usar en la India y que exigen las reglamentaciones del DoT de ese país.

Una llamada de emergencia se inicia de una de las siguientes maneras:

Mantener presionado el botón EMERGENCIA
en la pantalla de bloqueo
Presionar la opción Emergencia
en el menú de acciones globales
Pantalla de bloqueo que muestra un botón de EMERGENCIA

Figura 1: Botón de EMERGENCIA en la pantalla de bloqueo.

Menú de acciones global con la opción Emergencia seleccionada

Figura 2: Acción de emergencia en el menú de acciones global (se accede presionando la tecla de encendido durante un tiempo prolongado).

Esta función introduce los siguientes componentes internos:

  • EmergencyAffordanceManager
        frameworks/base/core/java/com/android/internal/policy/EmergencyAffordanceManager.java
        
  • EmergencyAffordanceService
        frameworks/base/services/core/java/com/android/server/emergency/EmergencyAffordanceService.java
        

EmergencyAffordanceManager

El objeto EmergencyAffordanceManager proporciona una API interna para usar la función de accesibilidad de emergencia. Proporciona métodos para iniciar la llamada de emergencia y consultar en el tiempo de ejecución si se debe habilitar la función.

  • void performEmergencyCall(): Inicia una llamada de emergencia.
  • boolean needsEmergencyAffordance(): Determina si la función debe estar activa.

La función se puede inhabilitar de forma permanente en el momento de la compilación cambiando la constante EmergencyAffordanceManager.ENABLED a false. Esto hace que needsEmergencyAffordance() siempre devuelva false y evita que se inicie EmergencyAffordanceService.

EmergencyAffordanceService

El EmergencyAffordanceService es un servicio del sistema que supervisa el código móvil de país (MCC) de todas las redes celulares detectadas y el MCC de las tarjetas SIM instaladas. Si alguna de las tarjetas SIM instaladas o las redes celulares detectadas tienen un MCC que coincide con uno de los MCC de India (404 o 405), se habilitará la función. Esto significa que la función se puede habilitar en la India incluso si no hay una tarjeta SIM. Se supone que la red móvil permite el registro para llamadas de emergencia incluso sin una tarjeta SIM instalada. La función permanece habilitada hasta que se instala una SIM que no es de India y ninguna de las redes detectadas tiene un MCC coincidente.

Los siguientes recursos y parámetros de configuración afectan el comportamiento de la función de asistencia de emergencia. Si el tipo de configuración es el siguiente:

  • Resource: Es un recurso interno definido en frameworks/base/core/res/res/values/config.xml.
  • Parámetro de configuración: Es un parámetro de configuración almacenado en el proveedor de configuración del sistema.

Tabla 2: Parámetros de configuración que afectan el comportamiento de la función de acceso de emergencia

Tipo de configuración Name Descripción
Recurso config_emergency_call_number Es el número de teléfono al que se marca automáticamente cuando se inicia la llamada de emergencia.
Tipo: Cadena
Predeterminado: 112
Recurso config_emergency_mcc_codes Es un array de números enteros que enumera los países en los que la función debe estar activa.
Tipo: Array de números enteros
Valor predeterminado: {404,405}
Configuración emergency_affordance_number Es la anulación de la configuración global con el número al que se debe llamar con la asistencia de emergencia. Esto solo tiene efecto en las imágenes de compilación depurables (es decir, el tipo de compilación es userdebug o eng). Esto solo se debe usar para pruebas.
Tipo: Cadena
Valor predeterminado: Sin configurar
Configuración force_emergency_affordance Es un parámetro de configuración global que indica si se debe mostrar la función de acceso de emergencia independientemente del estado del dispositivo. Esto solo se debe usar para pruebas.
Tipo: Booleano (1 o 0)
Valor predeterminado: Sin configurar --> 0

Cómo habilitar las llamadas de emergencia al 112

La función de asistencia para emergencias conecta la llamada con el marcador de emergencia para que se pueda conectar cuando la pantalla de bloqueo esté activa. El marcador de emergencia conecta llamadas solo a la lista de números que proporciona la capa de interfaz de radio (RIL) a través de la propiedad del sistema:

  • ril.ecclist cuando no hay una SIM instalada.
  • ril.ecclistSimSlotNumber cuando se inserta una SIM y SimSlotNumber es el ID de ranura del suscriptor predeterminado.

Los fabricantes de dispositivos que usan la función de asistencia en emergencias deben verificar que los dispositivos en la India siempre habiliten el 112 como número de emergencia en la RIL.

Validación

Cuando realices pruebas en una compilación depurable, el número al que se llama se puede cambiar con el siguiente comando:

adb shell settings put global emergency_affordance_number NUMBER_TO_CALL

Aunque este parámetro de configuración se puede establecer en una compilación de usuario normal, se ignora. Para conectar la llamada, el número debe estar en la lista de números de emergencia que proporciona la RIL. Esto se puede establecer de forma temporal con el siguiente comando que se ejecuta desde un shell raíz en un dispositivo userdebug:

setprop ril.ecclist "$(getprop ril.ecclist),NUMBER_TO_CALL"

El siguiente comando también se puede usar para forzar la habilitación de la función de asistencia en emergencias, incluso en ausencia de una red móvil india detectada o una tarjeta SIM india insertada.

adb shell settings put global force_emergency_affordance 1

Como mínimo, se recomienda probar los siguientes casos:

  • Cuando se activa, si mantienes presionado el botón EMERGENCIA en la pantalla de bloqueo (figura 1), se inicia una llamada al número de emergencia especificado.
  • Cuando se activa, el elemento Emergencia del menú de acciones globales está presente y, si lo presionas, se inicia una llamada al número de emergencia especificado.
  • La función no se activa si no se detecta una red móvil de India con una tarjeta SIM que no sea de India instalada.
  • La función se activa en el dispositivo cuando se instala una tarjeta SIM india, independientemente de las redes móviles detectadas.
  • La función se activa en el dispositivo cuando hay una red móvil de la India, independientemente de las tarjetas SIM instaladas.

Si un dispositivo admite varias tarjetas SIM, las pruebas deben verificar que la detección del MCC de la SIM funcione correctamente en cada ranura de SIM. La función de asistencia en caso de emergencia no se rige por el Conjunto de pruebas de compatibilidad (CTS) de Android, por lo que no hay pruebas de CTS para ella.

Preguntas frecuentes

P.: El número de emergencia 112 aún no se ha habilitado en India. ¿Se debería seguir usando?

El 112 es el número que se usa en la India como Centro de Respuesta de Seguridad Pública (PSAP), según lo define el Sistema Integrado de Comunicaciones y Respuesta ante Emergencias (IECRS). Hasta que se ponga en funcionamiento el CRSP, todas las llamadas al 112 se enrutan al número de emergencia 100 existente (aunque esto es responsabilidad del operador, no de Android).

P.: ¿Qué sucede con otros activadores, como presionar tres veces el botón de encendido?

Los fabricantes de dispositivos pueden implementar activadores adicionales. Sin embargo, si bien el DoT de la India aprueba presionar tres veces el botón de encendido del hardware, este activador no se admite en la implementación de referencia del AOSP, ya que algunas apps muy usadas (por ejemplo, la app de Cámara) usan gestos del botón de encendido que incluyen presionar repetidamente el botón de encendido. Estas apps pueden interferir con el marcador de emergencia, o bien el usuario puede activar accidentalmente el botón de pánico mientras intenta activar acciones en ellas.