Implemente auxílio emergencial

Todos os dispositivos móveis vendidos na Índia a partir de 1º de janeiro de 2017 precisam ter um botão de pânico para atender aos requisitos do Departamento de Telecomunicações da Índia (DoT, na sigla em inglês). Para atender a esses requisitos regulamentares, o Android inclui uma implementação de referência do recurso de recurso de emergência para ativar um botão de pânico em dispositivos Android.

Esse recurso é ativado por padrão no Android 8.0 e versões mais recentes, mas precisa ser corrigido em builds existentes de versões anteriores. Esse recurso é direcionado exclusivamente a dispositivos vendidos no mercado indiano, mas pode ser incluído em todos os dispositivos vendidos em todo o mundo, já que não tem efeito fora da Índia.

Exemplos e origem

O recurso de affordance de emergência é implementado no projeto frameworks/base do Android Open Source Project (AOSP). Ele está disponível na ramificação principal e é ativado por padrão nas versões do Android 8.0 e mais recentes.

Esse recurso está disponível nas seguintes ramificações e confirmações. Essas informações são fornecidas para permitir que os fabricantes de dispositivos apliquem patches facilmente nas mudanças necessárias nos builds atuais. Os fabricantes de dispositivos que querem implementar o recurso de referência de Affordance de emergência do AOSP podem escolher as confirmações das ramificações aplicáveis nos próprios builds.

Tabela 1. Seleção de recursos de referência de emergência do AOSP

Filial Confirmações
principal e0c3c66 Adição do recurso de recursos de emergência
42a4338 Adição de traduções para a string de ação de emergência
4df8d64 Correção de um problema em que o recurso de recursos de emergência aparecia em tablets
nougat-dev e6680d9 Adição do recurso de suporte emergencial
95e1865 Adição de traduções para a string de ação de emergência
a70bb89 Correção de um problema em que o recurso de suporte emergencial aparecia em tablets
marshmallow-dev cd22634 Adição do recurso de suporte de emergência
13f51c6 Adição de traduções para a string de ação de emergência
6531666 Correção de um problema em que o recurso de suporte de emergência aparecia em tablets
lollipop-mr1-dev 5fbc86b Adição do recurso de suporte em caso de emergência
1b60879 Adição de traduções para a string de ação de emergência
d74366f Correção de um problema em que o recurso de suporte em caso de emergência aparecia em tablets

Implementação

O recurso de recursos de emergência não faz mudanças nas APIs expostas pelo kit de desenvolvimento de software (SDK) do Android. Quando ativado, o recurso oferece dois gatilhos que podem iniciar uma chamada de emergência para o 112, que é o único número de emergência a ser usado na Índia e exigido pelas regulamentações do Departamento de Transporte indiano.

Uma chamada de emergência é iniciada por:

Toque e pressione o botão EMERGENCY
na tela de bloqueio.
Tocar na opção Emergência
no menu de ações global
botão de emergência

Figura 1. Botão EMERGENCY na tela de bloqueio.

opção de
emergência

Figura 2. Ação de emergência no menu de ações global (acessado pressionando a tecla liga/desliga por muito tempo).

Esse recurso apresenta os seguintes 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

O EmergencyAffordanceManager fornece uma API interna para usar o recurso de affordance de emergência. Ele fornece métodos para iniciar a chamada de emergência e consultar no momento da execução se o recurso precisa ser ativado.

  • void performEmergencyCall(): inicia uma chamada de emergência.
  • boolean needsEmergencyAffordance(): determina se o recurso precisa estar ativo.

O recurso pode ser desativado permanentemente no momento do build mudando a constante EmergencyAffordanceManager.ENABLED para false. Isso faz com que needsEmergencyAffordance() sempre retorne falso e impeça que EmergencyAffordanceService seja iniciado.

EmergencyAffordanceService

O EmergencyAffordanceService é um serviço do sistema que monitora o código de país para dispositivos móveis (MCC) de todas as redes celulares detectadas e o MCC dos cartões SIM instalados. Se algum dos chips instalados ou das redes celulares detectadas tiver um MCC correspondente a um dos MCCs da Índia (404 ou 405), o recurso será ativado. Isso significa que o recurso pode ser ativado na Índia mesmo que não haja um chip. Supõe-se que a rede móvel permite o registro de chamadas de emergência mesmo sem um chip instalado. O recurso permanece ativado até que um SIM de outro país seja instalado e nenhuma das redes detectadas tenha um MCC correspondente.

Os recursos e as configurações a seguir afetam o comportamento do recurso de affordance de emergência. Se o tipo de configuração for:

  • Resource: é um recurso interno definido em frameworks/base/core/res/res/values/config.xml.
  • Configuração, é uma configuração armazenada no provedor de configurações do sistema.

Tabela 2. Configurações que afetam o comportamento do recurso de affordance de emergência

Tipo de configuração Nome Descrição
Recurso config_emergency_call_number O número de telefone que é discado automaticamente quando a chamada de emergência é iniciada.
Tipo: String
Padrão: 112
Recurso config_emergency_mcc_codes Uma matriz de números inteiros que lista as MCCs em que o recurso precisa estar ativo.
Tipo: matriz de números inteiros
Padrão: {404,405}
Configuração emergency_affordance_number Substituição de configuração global com o número a ser chamado com o affordance de emergência. Isso afeta apenas as imagens de build depuráveis, ou seja, o tipo de build é userdebug ou eng. Isso é destinado apenas a testes.
Tipo: String
Padrão: não definido
Configuração force_emergency_affordance Configuração global, se o recurso de affordance de emergência precisa ser mostrado independentemente do estado do dispositivo. Isso é destinado apenas a testes.
Tipo: booleano (1 ou 0)
Padrão: desativado --> 0

Ativar chamadas de emergência para 112

O recurso de affordância de emergência conecta a chamada usando o discador de emergência para que a chamada possa ser conectada quando a tela de bloqueio estiver ativa. O discador de emergência conecta chamadas apenas à lista de números fornecida pela camada de interface de rádio (RIL) pela propriedade do sistema:

  • ril.ecclist quando nenhum chip estiver instalado.
  • ril.ecclistSimSlotNumber quando um chip é inserido e SimSlotNumber é o ID do slot do assinante padrão.

Os fabricantes de dispositivos que usam o recurso de recursos de emergência precisam garantir que os dispositivos na Índia sempre ativem o 112 como um número de emergência no RIL.

Validação

Durante o teste em um build depurável, o número chamado pode ser alterado com o seguinte comando:

adb shell settings put global emergency_affordance_number NUMBER_TO_CALL

Embora essa configuração possa ser definida em uma build de usuário normal, ela é ignorada. Para conectar a chamada, o número precisa estar na lista de números de emergência fornecidos pelo RIL. Isso pode ser definido temporariamente usando o seguinte comando executado em um shell raiz em um dispositivo userdebug:

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

O comando a seguir também pode ser usado para forçar o recurso de recurso de emergência a ser ativado mesmo na ausência de uma rede móvel indiana detectada ou de um chip indiano inserido.

adb shell settings put global force_emergency_affordance 1

No mínimo, é recomendável testar os seguintes casos:

  • Quando ativado, tocar e manter pressionado o botão EMERGENCY na tela de bloqueio (Figura 1) inicia uma chamada para o número de emergência especificado.
  • Quando ativado, o item Emergência no menu de ação global está presente e, ao tocar nele, uma chamada é iniciada para o número de emergência especificado.
  • O recurso não é ativado se não for detectada uma rede móvel indiana com um chip de outro país instalado.
  • O recurso é ativado no dispositivo quando um cartão SIM indiano é instalado, independentemente das redes móveis detectadas.
  • O recurso é ativado no dispositivo na presença de uma rede móvel indiana, independentemente dos chips instalados.

Se um dispositivo tiver suporte a vários chips, o teste precisa garantir que a detecção do MCC do chip funcione corretamente em cada slot de chip. O recurso de affordance de emergência não é regido pela compatibilidade do Android. Portanto, não há testes do conjunto de teste de compatibilidade (CTS, na sigla em inglês) para ele.

Perguntas frequentes

P: O número de emergência 112 ainda não foi comissionado na Índia. Ele ainda deve ser usado?

O 112 é o número usado na Índia como a central de atendimento de segurança pública (PSAP, na sigla em inglês), conforme definido pelos sistemas integrados de resposta e comunicação de emergência (IECRS, na sigla em inglês). Até que o PSAP seja comissionado, todas as ligações para 112 serão roteadas para o número de emergência 100 (embora isso seja responsabilidade da operadora, não do Android).

P: E quanto a outros gatilhos, como pressionar três vezes o botão liga/desliga?

Os fabricantes de dispositivos podem implementar outros acionadores. No entanto, enquanto o DoT indiano aprova o toque triplo no botão liga/desliga do hardware, esse gatilho não é compatível com a implementação de referência do AOSP, já que alguns apps amplamente usados (por exemplo, o app Câmera) usam gestos do botão liga/desliga que incluem toques repetidos no botão. Esses apps podem interferir no discador de emergência ou o usuário pode acionar acidentalmente o botão de pânico ao tentar acionar ações nesses apps.