Detecção de fuso horário de localização

A detecção de fuso horário de localização, disponível no Android 12 ou superior, é um recurso opcional de detecção automática de fuso horário que permite que os dispositivos usem seus dados de mapa de localização e fuso horário para determinar o fuso horário.

A detecção de fuso horário de localização é 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 de localização 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 de telefonia e localização.

  • Um sistema plug-in para componentes que realizam detecção de localização e mapeamento de fuso horário. Um plug-in é chamado de Location Time Zone Provider (LTZP) e pode haver até dois deles em um dispositivo. A plataforma fornece APIs de sistema que devem ser usadas para implementar um LTZP.

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

  • Ferramentas de host para gerar um conjunto de dados de referência a partir de dados do OpenStreetMap que pode ser usado 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 alternância para selecionar o algoritmo de localização, os usuários podem desativar o algoritmo de localização 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 explicitamente a detecção de localização para detecção de fuso horário por meio da tela Configurações de data e hora . Os usuários não precisam conceder permissão explicitamente por meio de 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, acontece o seguinte:

    • Os serviços de detector de fuso horário recebem IDs de fuso horário apenas pelo LTZP, não pela localização do dispositivo. Esta é a API mínima necessária para oferecer suporte à detecção de fuso horário de localização.
    • A operação de LTZPs individuais é deixada para os integradores de sistemas decidirem. As implementações LTZP podem usar dados de mapa de fuso horário mantidos inteiramente no dispositivo Android, aproveitar servidores ou usar uma abordagem híbrida.

Comportamento do recurso

O serviço time_zone_detector determina quando alterar 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 nenhuma lógica de detecção de fuso horário. É responsável por gerenciar o ciclo de vida de um ou dois plug-ins chamados Location Time Zone Providers (LTZP).

Quando a detecção do fuso horário local não é necessária, os LTZPs não são iniciados. Isso significa que o sistema de detecção de fuso horário de localização não solicita aos LTZPs que rastreiem a localização do dispositivo, a menos que sejam explicitamente solicitados. Algumas das razões para esse comportamento incluem o seguinte:

  • 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 aos provedores de localização do Android e pode consumir energia adicional.
  • As configurações de localização são do usuário e o Android deve respeitar as configurações do usuário atual.
  • Obter a localização do dispositivo é uma questão sensível à privacidade.

Além disso, o serviço location_time_zone_manager faz uma sugestão incerta (se for necessária) quando o usuário atual muda para evitar o compartilhamento de informações de localização entre os usuários.

Como resultado dessas escolhas, geralmente leva alguns segundos após a mudança do algoritmo atual para o local, ou após a mudança do usuário atual, antes que o fuso horário possa ser detectado. Isso também depende das implementações dos LTZPs utilizados.

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

LTZP primário
É 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 relatar que o fuso horário é incerto , relatar uma falha permanente ou expirar durante a inicialização. Para se o LTZP primário enviar uma determinada sugestão.

Conforme mostrado na Figura 1, os serviços time_zone_detector recebem sugestões de fuso horário do algoritmo de telefonia ou localização. O algoritmo de localização recebe sugestões do LTZP primário ou secundário.

Fluxo de informações de detecção de fuso horário de localização

Figura 1. Fluxo de informações de detecção de fuso horário de localização.

Requisitos de configuração do dispositivo

Para oferecer suporte ao recurso de fuso horário de localização, os dispositivos devem ser configurados com LTZPs que o dispositivo possa usar. Os dispositivos exigem que pelo menos um LTZP esteja habilitado 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 dispositivos para oferecer suporte à detecção de fuso horário de localização.

A configuração básica do AOSP está em frameworks/base/core/res/res/values/config.xml :

Chave de configuração Valor AOSP Descrição
config_enableGeolocationTimeZoneDetection true Este é o controle principal para o recurso de detecção de fuso horário de localização.

O recurso é suportado por padrão no AOSP. Pelo menos um LTZP deve estar habilitado ou configurado para que o recurso esteja disponível aos usuários.

Definir o valor como false desativa totalmente o recurso para uma pequena economia de memória.
config_enablePrimaryLocationTimeZoneProvider false Isso habilita o LTZP primário.
config_primaryLocationTimeZoneProviderPackageName Defina como o nome do pacote do aplicativo onde o serviço do provedor principal pode ser encontrado.
config_enableSecondaryLocationTimeZoneProvider false Isso habilita o LTZP secundário.
config_secondaryLocationTimeZoneProviderPackageName Defina como o nome do pacote do aplicativo onde 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 , habilitando o suporte para o recurso de detecção de fuso horário de localização. O recurso não é visível inicialmente para os usuários porque o AOSP não inclui uma configuração LTZP por padrão. No entanto, usando esta configuração padrão, os fabricantes de dispositivos podem ativar e simular LTZPs a partir da linha de comando para teste. (Para obter mais informações, consulte Depuração e teste .)

APIs de status LTZP

No Android 14, as APIs LTZP oferecem suporte às informações de status dos relatórios LTZP. Isto permite que o LTZP reporte problemas que a plataforma pode não ser capaz de detetar por si mesma, uma vez que os componentes de deteção de fuso horário da plataforma não estão diretamente envolvidos na localização ou na deteção de fuso horário no algoritmo de localização.

A capacidade de relatar que o comportamento do LTZP foi degradado pelo ambiente do dispositivo é útil quando o modo de fallback de telefonia é suportado. Por exemplo, se um LTZP de terceiros que depende de configurações personalizadas ou permissões para que sua detecção de localização funcione esteja sendo executado em modo degradado ou desabilitado pelas configurações atuais do dispositivo, ele poderá relatar essas informações de status para componentes internos da plataforma, como o aplicativo Configurações. através do método reportSuggestion . O aplicativo Configurações pode então notificar os usuários por meio de strings personalizáveis ​​ou personalizações de que há configurações que devem ser alteradas para que o algoritmo de localização funcione bem ou funcione bem.

Para obter mais informações sobre os status que o LTZP pode relatar, consulte TimeZoneProviderStatus .

Configuração e implantação do provedor de fuso horário local

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 Javadoc fornecem detalhes sobre o serviço, permissões necessárias e outras configurações.

Para configurar um provedor de fuso horário de localização, os fabricantes de dispositivos devem escolher um processo de aplicativo para hospedar o serviço LTZP. Ter um processo dedicado para um LTZP representa uma sobrecarga elevada; idealmente, o processo do aplicativo escolhido é aquele que está em execução o tempo todo, como o servidor do sistema.

Em dispositivos com componentes de sistema modular (módulos), considere a interação entre os dados geográficos usados ​​pelo LTZP e as regras de fuso horário (tzdb) transportadas no módulo Dados de fuso horário ( com.android.tzdata ). Atualizações para um sem atualizações para o outro provavelmente causarão problemas de distorção de versão. Para obter mais informações, consulte Considerações sobre adoção de recursos .

Referência AOSP LTZP

AOSP contém uma implementação LTZP de referência em packages/modules/GeoTZ . Esta implementação de referência usa APIs AOSP para determinar a localização do dispositivo e usa um arquivo de dados no dispositivo para mapear a localização para 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 obter mais detalhes, consulte README.md e os vários arquivos LICENSE.

Depurar e testar

A seção a seguir descreve comandos shell para depuração e teste do recurso de detecção de fuso horário de localização.

Interaja com o serviço location_time_zone_manager

Quando o algoritmo de localização é compatível com um dispositivo com Android 12 ou superior, o Android instancia o serviço location_time_zone_manager no momento da inicialização.

Para despejar o estado atual de location_time_zone_manager , use:

adb shell cmd location_time_zone_manager dump

Para ver um amplo conjunto de opções de linha de comando para auxiliar 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 teste ou em produção. Para obter mais informações, consulte Configurando um dispositivo usando o serviço device_config .

As implementações LTZP também podem fornecer seu próprio suporte para depuração ou teste. Por exemplo, você pode usar o comando a seguir para depurar a referência AOSP LTZP quando ela estiver registrada no processo do servidor do sistema.

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService