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 affordance 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). Ela está disponível na versão mais recente do Android e é ativada por padrão no Android 8.0 e versões 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 façam o patch das mudanças necessárias nos builds atuais. Os fabricantes de dispositivos que querem implementar o recurso de referência de acessibilidade 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 |
|---|---|
| android-latest-release | 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 emergencial 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 emergencial 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 |
|---|---|
Figura 1. Botão EMERGENCY na tela de bloqueio. |
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 false
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. Esse comando é 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. Esse comando é destinado apenas a testes. Tipo: booleano (1 ou 0) Padrão: desativado --> 0 |
Ativar chamadas de emergência para 112
O recurso de affordance 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 fornecidos pela camada de interface de rádio (RIL) pela propriedade do sistema:
ril.ecclistquando nenhum chip estiver instalado.ril.ecclistSimSlotNumberquando um chip é inserido eSimSlotNumberé o ID do slot do assinante padrão.
Os fabricantes de dispositivos que usam o recurso de recurso 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. 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 essa seja a 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.