Detecção do fuso horário do local

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

A detecção de fuso horário do local é um mecanismo alternativo ao fuso horário da telefonia detecção. Como este não requer telefonia, ele pode ser suportado em dispositivos em 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 em plataforma AOSP:

  • Lógica de detecção de fuso horário no servidor do sistema.
  • Uma opção acessível ao usuário nas Configurações, introduzida no Android 12, para permitir que os usuários selecionem entre nos mecanismos de detecção de fuso horário e local.

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

  • Uma implementação de 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á um botão 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 uma dispositivo.

  • Os usuários podem controlar a detecção da localização para determinar o fuso horário explicitamente na tela "Configurações de Data e hora". Os usuários não têm para 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. Então, acontece o seguinte:

    • Os serviços de detector de fuso horário recebem apenas IDs de fuso horário. 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 do local.
    • A operação de LTZPs individuais é deixada para os integradores de sistemas para decidir. As implementações de LTZP podem usar dados de mapa de fuso horário mantidos inteiramente no dispositivo Android, usam servidores ou usam um abordagem humilde.

Funcionamento do recurso

O serviço time_zone_detector determina quando mudar a configuração atual do dispositivo fuso horário 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 de time_zone_detector. O 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 detecção de fuso horário lógica. Ele é responsável por gerenciar o ciclo de vida de um ou dois plug-ins chamados Provedores de fuso horário do local (LTZPs, na sigla em inglês).

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 local do dispositivo, a menos que seja explicitamente exigido. Algumas motivos para esse comportamento incluem o seguinte:

  • Ao contrário dos sinais de telefonia que são recebidos passivamente em operações normais de telefonia, a localização pode ser solicitada ativamente Provedores de localização do Android e pode consumir mais energia.
  • As configurações de localização estão no escopo do usuário, e o Android precisa respeitar o as configurações do usuário.
  • A localização do dispositivo envolve informações confidenciais.

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

Como resultado dessas escolhas, geralmente leva alguns segundos após a troca de o algoritmo atual para a localização ou após alternar o usuário atual, antes que o fuso horário possa ser detectado. Isso também depende das implementações dos LTZPs que está sendo usado.

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

LTZP primário
É executado sempre que o usuário permite a detecção de fuso horário do local para ser executado.
LTZP secundário
É executado se o LTZP principal informa que o fuso horário é indefinido, relata uma uma falha permanente ou expira durante a inicialização. É interrompido se a instância principal O LTZP envia uma certa sugestão.

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

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

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

Requisitos de configuração do dispositivo

Para oferecer suporte ao recurso de fuso horário do local, os dispositivos precisam ser configurados com LTZPs que o dispositivo pode usar. Os dispositivos exigem que pelo menos um LTZP esteja ativado e configurada para que a detecção de fuso horário do local funcione e fique visível para usuários nas Configurações.

Configuração do dispositivo

Esta seção descreve como os fabricantes podem configurar dispositivos para oferecer suporte detecção de fuso horário do local.

A configuração básica do AOSP é 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 aos usuários.

Definir o valor como "false" desativa totalmente o recurso para uma memória pequena os dados.
config_enablePrimaryLocationTimeZoneProvider false Isso ativa o LTZP principal.
config_primaryLocationTimeZoneProviderPackageName Defina como o nome do pacote do app em que o provedor principal não é possível encontrá-la.
config_enableSecondaryLocationTimeZoneProvider false Isso ativa o LTZP secundário.
config_secondaryLocationTimeZoneProviderPackageName Defina como o nome do pacote do app em que o provedor secundário serviço possa ser encontrado.

Por padrão, a configuração do AOSP tem a A chave config_enableGeolocationTimeZoneDetection foi definida como true, ativando o suporte para o recurso de detecção do fuso horário do local. O recurso não está visível para 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 com a linha de comando para testes. Para mais informações, consulte Depuração e testes.)

APIs de status de LTZP

No Android 14, as APIs LTZP têm suporte informações de status de relatórios. Isso permite que o LTZP informe problemas que a plataforma pode não conseguir detectar, já que ela componentes de detecção de fuso horário não estão diretamente envolvidos no local ou no horário detecção de zona no algoritmo de localização.

A capacidade de informar que o comportamento do LTZP foi prejudicado pelo é útil quando modo substituto de telefonia é suportado. Por exemplo, se um LTZP de terceiros que usa configurações personalizadas as permissões para que a detecção de local funcione esteja em execução em um modo degradado ou desativado pelas configurações atuais do dispositivo, ele pode informar esse status informações para componentes internos da plataforma, como o aplicativo Configurações, por meio do reportSuggestion . O app Configurações pode notificar os usuários por meio de strings personalizáveis ou personalizações. Configurações que devem ser alteradas para o local que o algoritmo funcione bem.

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

Configuração e implantação de 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, permissões necessárias e outras configurações.

Para configurar um LTZP, os fabricantes de dispositivos precisam escolher um processo do app para hospedar o serviço do LTZP. Ter um processo dedicado para um LTZP é uma sobrecarga alta. O ideal é que o processo do app escolhido seja aquele que esteja sendo executado todos os momentos, como no 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) executadas no Módulo de dados de fuso horário (com.android.tzdata). É provável que haja atualizações em uma versão sem a outra para causar problemas de distorção entre as versões. 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 Esta implementação de referência usa APIs do AOSP para determinar a localização do dispositivo. e usa 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 está incluído no o código-fonte. Para mais detalhes, consulte README.md (em inglês) e os vários arquivos LICENSE.

Depurar e testar

A seção a seguir descreve 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 em execução tem suporte ao algoritmo de localização o Android 12 ou mais recente, O Android instancia o serviço location_time_zone_manager no momento da inicialização.

Para despejar o estado atual da location_time_zone_manager, use:

adb shell cmd location_time_zone_manager dump

Para conferir um amplo conjunto 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 usada para afetar o comportamento do time_zone_detector em testes ou a produção. Para mais informações, consulte Como configurar um dispositivo usando o serviço device_config

As implementações de LTZP também podem fornecer suporte próprio para depuração ou teste. Por exemplo, é possível usar o seguinte comando para depurar o LTZP de referência do AOSP quando registrado no processo do servidor do sistema.

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