Detecção do fuso horário do local

A detecção de fuso horário local, disponível no Android 12 e em versões mais recentes, é um recurso opcional de detecção automática de fuso horário. Com ele, os dispositivos usam 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 exige 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 ao usuário em "Configurações", introduzida no Android 12, para permitir que os usuários selecionem entre os mecanismos de detecção de fuso horário por telefonia e localização

  • Um sistema de plug-in para componentes que realizam 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), e pode haver até dois deles em um dispositivo. A plataforma fornece APIs de sistema que precisam ser usadas para implementar uma LTZP.

  • Uma implementação de referência da LTZP.

  • Ferramentas de host para gerar um conjunto de dados de referência com base em 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á uma chave 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 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 em uma caixa de diálogo.

  • As informações de localização do dispositivo não são transmitidas aos serviços da plataforma Android. Em vez disso, acontece o seguinte:

    • Os serviços de detecção de fuso horário recebem IDs de fuso horário da LTZP, não a localização 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 do LTZP podem usar dados de mapa de fuso horário armazenados totalmente no dispositivo Android, usar servidores ou 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ões para o algoritmo de localização do 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 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, os LTZPs não são iniciados. Isso significa que o sistema de detecção de fuso horário do local não pede que os LTZPs rastreiem a localização do dispositivo, a menos que 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 consumir mais energia.
  • As configurações de local são definidas pelo usuário, e o Android precisa respeitar as configurações do usuário atual.
  • 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, leva alguns segundos após a troca do algoritmo atual para a localização ou após a troca do usuário atual para que o fuso horário seja detectado. Isso também depende das implementações das LTZPs usadas.

A implementação da detecção de fuso horário do local (LTZP) do AOSP permite até dois LTZPs, um primário e um secundário, conforme definido aqui:

LTZP principal
É executado sempre que o usuário permite que o recurso de detecção de fuso horário seja executado.
LTZP secundário
Executa se o LTZP principal informar que o fuso horário é incerto, relatar uma falha permanente ou atingir o tempo limite durante a inicialização. É interrompido se a LTZP principal enviar uma sugestão definitiva.

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 da LTZP primária ou secundária.

Fluxo de informações da detecção de fuso horário do local

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 possam ser usados. Os dispositivos precisam ter pelo menos uma LTZP ativada e configurada para que a detecção de fuso horário por localização funcione e fique 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 aparelhos para oferecer suporte à detecção de fuso horário por localização.

A configuração base 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 é compatível por padrão no AOSP. Pelo menos uma LTZP precisa estar ativada ou configurada para que o recurso fique disponível aos usuários.

Definir o valor como false desativa o recurso completamente para uma pequena economia de memória.
config_enablePrimaryLocationTimeZoneProvider false Isso ativa a 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 a LTZP secundária.
config_secondaryLocationTimeZoneProviderPackageName Defina 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 para o 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, usando 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 a informações de status de relatórios LTZP. Isso permite que o LTZP relate problemas que a plataforma talvez não consiga 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 fuso horário no algoritmo de localização.

A capacidade de informar que o comportamento do LTZP foi prejudicado pelo ambiente do dispositivo é útil quando o modo de substituição de telefonia é compatível. Por exemplo, se uma LTZP de terceiros que depende de configurações ou permissões personalizadas para que a detecção de local funcione estiver sendo executada em um modo degradado ou desativada pelas configurações atuais do dispositivo, a LTZP poderá informar essas informações de status a componentes internos da plataforma, como o app Configurações, usando o método reportSuggestion. O app Configurações pode notificar os usuários com 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 a LTZP pode informar, consulte TimeZoneProviderStatus.

Configuração e implantação do LTZP

Ao configurar uma LTZP, leia as instruções no código-fonte de 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 uma LTZP, os fabricantes de dispositivos precisam escolher um processo de app para hospedar o serviço da LTZP. Ter um processo dedicado para uma LTZP é uma sobrecarga alta. O ideal é que o processo do app escolhido esteja sempre em execução, como o servidor do sistema.

Em dispositivos com componentes de sistema modular (módulos), considere a interação entre os dados geográficos usados pela LTZP e as regras de fuso horário (tzdb) contidas no módulo de dados de fuso horário (com.android.tzdata). Atualizações em um sem atualizações no outro provavelmente causarão 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 referência do LTZP em packages/modules/GeoTZ. Essa implementação de referência usa APIs do AOSP para determinar a localização do dispositivo e um arquivo de dados no dispositivo para mapear a localização a um conjunto de IDs de fuso horário.

Um conjunto de dados de referência derivado de outros projetos de código aberto está incluído no código-fonte. Para mais detalhes, consulte README.md e os vários arquivos LICENSE.

Depurar e testar

A seção a seguir descreve 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 o algoritmo de localização é compatível com um dispositivo que executa o Android 12 e versões mais recentes, o Android cria uma instância do serviço location_time_zone_manager na inicialização do sistema.

Para despejar o estado atual do location_time_zone_manager, use:

adb shell cmd location_time_zone_manager dump

Para conferir um conjunto extenso de opções de linha de comando que ajudam 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 em testes ou em 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 a seguir 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