A detecção de fuso horário do local, disponível no Android 12 e versões mais recentes, é um recurso opcional de detecção automática de fuso horário que permite que os dispositivos usem os dados de local e mapa de fuso horário para determinar o fuso horário.
A detecção de fuso horário do local é um mecanismo alternativo à detecção de fuso horário de telefonia. Como esse recurso não requer telefonia, ele pode ser compatível com dispositivos de vários formatos, além de dispositivos de telefonia móvel.
O recurso de detecção de fuso horário do local consiste nos seguintes componentes na plataforma AOSP:
- Lógica de detecção de fuso horário no servidor do sistema
Uma opção acessível pelo usuário nas Configurações, lançada no Android 12, para permitir que os usuários selecionem entre os mecanismos de detecção de fuso horário do local e da telefonia.
Um sistema de plug-in para componentes que executam a detecção de local e o mapeamento de fuso horário. O plug-in é chamado de provedor de fuso horário de localização (LTZP, na sigla em inglês). É possível ter até dois deles em um dispositivo. A plataforma oferece APIs do sistema que precisam ser usadas para implementar um LTZP.
Uma implementação de LTZP de referência.
Hospedar ferramentas para gerar um conjunto de dados de referência com dados do Open Street Map (OSM) que podem ser usados com a implementação de referência.
Privacidade do usuário
A detecção de fuso horário do local inclui os seguintes recursos de privacidade do usuário:
Quando há um botão para selecionar o algoritmo de localização, os usuários podem desativá-lo a qualquer momento.
As sugestões de fuso horário derivadas da localização não são compartilhadas entre os usuários em um dispositivo.
Os usuários podem controlar a detecção de local para detecção de fuso horário explicitamente na tela de configurações de Data e hora. Os usuários não precisam conceder permissão explicitamente por uma caixa de diálogo de permissão.
As informações de localização do dispositivo não são transmitidas aos serviços da Plataforma Android. Em vez disso, o seguinte acontece:
- Os serviços do detector de fuso horário recebem IDs de fuso horário do LTZP, não do local do dispositivo. Essa é a API mínima necessária para oferecer suporte à detecção de fuso horário do local.
- Os integradores de sistemas controlam a operação de LTZPs individuais. As implementações de LTZP podem usar dados de mapa de fuso horário armazenados inteiramente no dispositivo Android, usar servidores ou usar uma abordagem híbrida.
Funcionamento do recurso
O serviço time_zone_detector
determina quando mudar o fuso horário
atual do dispositivo com base nas sugestões recebidas dos algoritmos de detecção.
O serviço location_time_zone_manager
é responsável por gerar
sugestão para o algoritmo de localização de time_zone_detector
. O
serviço location_time_zone_manager
é executado no processo do servidor do sistema.
O serviço location_time_zone_manager
não contém nenhuma lógica de detecção de
fuso horário. Esse serviço é responsável por gerenciar o ciclo de vida de um ou dois
plug-ins LTZP.
Quando a detecção de fuso horário do local não é necessária, as LTZPs não são iniciadas. Isso significa que o sistema de detecção de fuso horário não pede que os LTZPs rastreiem a localização do dispositivo, a menos que isso seja explicitamente necessário. Alguns dos motivos para esse comportamento incluem:
- Ao contrário dos sinais de telefonia que são recebidos passivamente como parte das operações normais de telefonia, a localização pode ser solicitada ativamente dos provedores de localização do Android e pode consumir mais energia.
- As configurações de local são aplicadas ao usuário, e o Android precisa respeitar as configurações atual do usuário.
- A obtenção da localização do dispositivo é sensível à privacidade.
Além disso, o serviço location_time_zone_manager
faz uma sugestão incerta (se
necessário) quando o usuário atual muda as configurações para evitar o compartilhamento de
informações de local entre usuários.
Como resultado dessas escolhas, é necessário aguardar alguns segundos depois de mudar o algoritmo atual para o local ou depois de alternar o usuário atual para que o fuso horário possa ser detectado. Isso também depende das implementações dos LTZPs que estão sendo usados.
A implementação da detecção de fuso horário do local do AOSP permite até duas LTZPs, uma primária e uma secundária, conforme definido aqui:
- LTZP principal
- É executado sempre que o usuário permite a execução do recurso de detecção de fuso horário do local.
- LTZP secundário
- É executado se o LTZP primário informar que o fuso horário é incerto, informar uma falha permanente ou atingir o tempo limite durante a inicialização. É interrompido se o LTZP principal enviar uma sugestão certa.
Como mostrado na Figura 1, o serviço time_zone_detector
recebe sugestões de fuso horário
do algoritmo de telefonia ou localização. O algoritmo de localização
recebe sugestões do LTZP principal ou secundário.
Figura 1. Fluxo de informações da detecção de fuso horário do local.
Requisitos de configuração do dispositivo
Para oferecer suporte ao recurso de fuso horário de localização, os dispositivos precisam ser configurados com LTZPs que o dispositivo possa usar. Os dispositivos precisam ter pelo menos um LTZP ativado e configurado para que a detecção de fuso horário do local seja funcional e visível para os usuários nas Configurações.
Configuração do dispositivo
Esta seção descreve como os fabricantes de dispositivos podem configurar os dispositivos para oferecer suporte à detecção de fuso horário do local.
A configuração básica do AOSP está em
frameworks/base/core/res/res/values/config.xml
:
Chave de configuração | Valor do AOSP | Descrição |
---|---|---|
config_enableGeolocationTimeZoneDetection |
true |
Esse é o controle principal do recurso de detecção de fuso horário do local.
O recurso tem suporte por padrão no AOSP. Pelo menos um LTZP precisa ser ativado ou configurado para que o recurso fique disponível para os usuários. Definir o valor como false desativa o recurso por completo para uma
pequena economia de memória. |
config_enablePrimaryLocationTimeZoneProvider |
false |
Isso ativa o LTZP principal. |
config_primaryLocationTimeZoneProviderPackageName |
Defina como o nome do pacote do app em que o serviço do provedor principal pode ser encontrado. | |
config_enableSecondaryLocationTimeZoneProvider |
false |
Isso ativa o LTZP secundário. |
config_secondaryLocationTimeZoneProviderPackageName |
Defina esse valor como o nome do pacote do app em que o serviço do provedor secundário pode ser encontrado. |
Por padrão, a configuração do AOSP tem a
chave config_enableGeolocationTimeZoneDetection
definida como true
, permitindo o suporte
ao recurso de detecção de fuso horário do local. O recurso não fica visível para
os usuários inicialmente porque o AOSP não inclui uma configuração de LTZP por padrão.
No entanto, com essa configuração padrão, os fabricantes de dispositivos podem ativar e
simular LTZPs na linha de comando para testes. Para mais informações, consulte
Depurar e testar.
APIs de status de LTZP
No Android 14, as APIs LTZP oferecem suporte às informações de status de relatórios de LTZP. Isso permite que o LTZP informe problemas que a plataforma não consegue detectar por conta própria, já que os componentes de detecção de fuso horário da plataforma não estão diretamente envolvidos na detecção de local ou de fuso horário no algoritmo de localização.
A capacidade de informar que o comportamento do LTZP foi degradado pelo ambiente
do dispositivo é útil quando o
modo de substituição de
telefonia
é compatível. Por exemplo, se um LTZP de terceiros que depende de configurações personalizadas
ou permissões para que a detecção de local funcione estiver em execução em um modo degradado
ou desativado pelas configurações atuais do dispositivo, o LTZP poderá informar essas informações de status
a componentes internos da plataforma, como o app Configurações, pelo método
reportSuggestion
. O app Configurações pode notificar os usuários por strings personalizáveis ou
personalizações de que há configurações que precisam ser alteradas para que o algoritmo de
localização funcione bem ou funcione.
Para mais informações sobre os status que o LTZP pode informar, consulte
TimeZoneProviderStatus
.
Configuração e implantação do LTZP
Ao configurar um LTZP, leia as instruções no código-fonte para
frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java
.
Os comentários do Javadoc fornecem detalhes sobre o serviço, as permissões necessárias e
outras configurações.
Para configurar um LTZP, os fabricantes de dispositivos precisam escolher um processo de app para hospedar o serviço do LTZP. Ter um processo dedicado para um LTZP é um overhead alto. O ideal é que o processo do app escolhido seja executado o tempo todo, como o servidor do sistema.
Em dispositivos com
componentes modulares do sistema
(módulos), considere a interação entre os dados geográficos usados pelo LTZP e
as regras de fuso horário (tzdb) transmitidas no
módulo de dados de fuso horário
(com.android.tzdata
). As atualizações de um sem atualizações do outro provavelmente
vão causar problemas de distorção de versão. Para mais informações, consulte
Considerações sobre a adoção de recursos.
LTZP de referência do AOSP
O AOSP contém uma implementação de LTZP de referência em
packages/modules/GeoTZ
.
Essa implementação de referência usa APIs do AOSP para determinar o local do dispositivo
e um arquivo de dados no dispositivo para mapear o local para um conjunto de IDs de fuso horário.
Um conjunto de dados de referência derivado de outros projetos de código aberto é incluído no código-fonte. Para mais detalhes, consulte README.md e os vários arquivos LICENSE.
Depurar e testar
Na seção a seguir, descrevemos os comandos do shell para depurar e testar o recurso de detecção de fuso horário do local.
Interagir com o serviço location_time_zone_manager
Quando um dispositivo com
o Android 12 e versões mais recentes têm suporte ao algoritmo de localização,
o Android instancia o serviço location_time_zone_manager
no momento da inicialização.
Para despejar o estado atual do location_time_zone_manager
, use:
adb shell cmd location_time_zone_manager dump
Para conferir um conjunto amplo de opções de linha de comando para ajudar nos testes, use:
adb shell cmd location_time_zone_manager help
A saída de ajuda também descreve as propriedades do serviço device_config
que podem
ser usadas para afetar o comportamento do time_zone_detector
para testes ou
produção. Para mais informações, consulte
Configurar um dispositivo usando o serviço
device_config.
As implementações de LTZP podem oferecer suporte próprio para depuração ou teste. Por exemplo, use o comando abaixo para depurar o LTZP de referência do AOSP quando ele estiver registrado no processo do servidor do sistema:
adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService