Visão geral do tempo

Esta página descreve como funciona a detecção de horário e fuso horário no Android. Isso inclui como o Android detecta automaticamente horários e fusos horários, opções de configuração para fabricantes de dispositivos e informações de teste.

Visão geral de horário e fusos horários

Para determinar a hora local de um usuário para exibição em locais como a barra de status, o Android monitora dois estados relacionados, mas independentes:

  • A época atual do Unix
  • O fuso horário atual

A hora atual da época Unix e o fuso horário atual são estados de todo o dispositivo, o que significa que são compartilhados por todos os usuários de um dispositivo.

O tempo atual da época do Unix não é um valor fixo. Ele é atualizado automaticamente para refletir a passagem do tempo. Além da passagem normal do tempo, o tempo atual da época Unix de um dispositivo é ajustado se for considerado incorreto, por exemplo, depois que um dispositivo perde energia.

O fuso horário atual determina o ajuste a ser feito para converter a hora atual da época Unix em uma hora local. Por exemplo, durante o verão em Los Angeles, o dispositivo subtrai 7 horas do horário atual da época Unix e, no inverno, subtrai 8 horas.

Para suportar esses cálculos de horário local, todos os dispositivos Android possuem um banco de dados de todas as regras globais de fuso horário . Para obter mais informações sobre regras de fuso horário, consulte Regras de fuso horário .

Quando um usuário viaja para um novo local que usa um fuso horário diferente, o horário atual da época do Unix não precisa ser ajustado, mas o usuário normalmente deseja ver a hora local em vez da hora do local anterior. Alterar o fuso horário atual garante que o deslocamento correto seja aplicado ao horário atual da época Unix para exibir a hora local correta para o novo local.

O AOSP permite que os usuários controlem de forma independente se a hora e o fuso horário são definidos automaticamente para eles por meio dos seguintes mecanismos.

  • Detecção automática de hora: garante que o dispositivo tenha a hora atual correta da época Unix.
  • Detecção automática de fuso horário: Garante que o dispositivo tenha o fuso horário atual correto.

Detecção automática de tempo

Esta seção fornece uma visão geral do serviço time_detector que gerencia a detecção automática de tempo, controles de usuário, opções de configuração e detalhes de teste.

O serviço time_detector

O serviço time_detector , presente em dispositivos com Android 10 ou superior, gerencia a detecção automática de tempo. Ele ajusta a época Unix atual do dispositivo conforme necessário quando a detecção automática de hora está habilitada.

O serviço time_detector está sempre em um dos dois estados: incerto ou certo . O estado certo ou incerto do serviço é determinado pelas sugestões de tempo que recebe de diversas fontes.

Quando o serviço time_detector é certo, o que significa que recebeu uma sugestão com informações de época do Unix, ele substitui o horário da época Unix atual se a sugestão de tempo for diferente do horário da época Unix atual.

Quando time_detector é incerto, ele não substitui a hora atual. O estado incerto geralmente significa que o serviço time_detector não recebeu sugestões de horário. O serviço time_detector também fica incerto se as sugestões recebidas forem consideradas antigas demais para serem usadas. A idade das sugestões é considerada porque os ajustes que usam sugestões de tempo de época antigas do Unix dependem do relógio de tempo real decorrido no dispositivo, que é considerado impreciso por longos períodos.

Para estabelecer automaticamente a época atual do Unix, um dispositivo possui várias fontes que pode usar. Estas são chamadas de origens neste documento. O serviço time_detector trata sequências de sugestões como distintas com base em sua origem.

O serviço time_detector é stateful, o que significa que mantém um registro da sugestão mais recente feita por cada origem. Novas sugestões são feitas para time_detector se uma origem tiver informações de época Unix mais recentes disponíveis. O serviço time_detector reavalia sugestões novas e existentes e atualiza o estado do dispositivo quando sugestões são recebidas.

Embora o horário UTC seja acordado internacionalmente, há vários motivos pelos quais estabelecer o horário atual da época Unix nem sempre é simples para um dispositivo Android:

  • O horário da época Unix é um sistema de cronometragem sutilmente diferente do horário UTC. A conversão entre os dois requer conhecimento de quando ocorrem os segundos bissextos e como eles são tratados pelas origens.
  • As origens podem estar disponíveis apenas em determinados momentos ou sob determinadas circunstâncias. Por exemplo, se a origem exigir conectividade de rede, ela poderá estar disponível apenas enquanto o dispositivo estiver conectado à Internet.
  • As origens podem ser imprecisas ou imprecisas, ou conter erros. Por exemplo, se uma torre de telefonia celular não estiver rastreando o "tempo universal" corretamente, a origem da telefonia poderá fornecer sugestões de tempo imprecisas.
  • Pode haver imprecisões introduzidas ao obter a época do Unix. Por exemplo, um atraso de rede, buffer ou agendamento de processo pode fazer com que o tempo da época do Unix seja impreciso.
  • O relógio de referência usado para ajustar uma sugestão para o tempo decorrido desde que a sugestão foi recebida pode ser impreciso.

Existem duas origens principais de detecção de tempo configuradas para uso por padrão no AOSP:

  • Rede : usa servidores de horário Network Time Protocol (NTP).
  • Telefonia: usa sinais de telefonia de identidade de rede e fuso horário (NITZ).

Tanto a origem da telefonia quanto a da rede exigem conectividade com redes externas, que nem sempre estão disponíveis.

A partir do Android 12, o Android também oferece suporte às seguintes origens, que não são configuradas para uso por padrão:

  • GNSS : usa o provedor de localização GPS para obter a hora de uma fonte GNSS.
  • Externo : Origem genérica que permite aos fabricantes de dispositivos integrar sua própria fonte de tempo da época Unix.

Configurações de tempo

Os usuários podem ativar a detecção automática de hora em Sistema> Data e hora no aplicativo Configurações AOSP.

Detecção automática de hora em Configurações

Figura 1. Detecção automática de hora em Configurações.

A tabela a seguir descreve os controles do usuário para detecção de tempo no aplicativo Configurações AOSP.

*No Android 11 e versões anteriores, essa configuração é rotulada como Usar horário fornecido pela rede

Localização das configurações do AOSP Nome das configurações AOSP Escopo Comportamento
Sistema > Data e Hora Definir hora automaticamente* Todos os usuários

Uma alternância.

Quando ativado , o dispositivo é responsável por detectar a época atual do Unix. Quando desativado , os usuários recebem controles para definir a hora do dispositivo manualmente.

Quando o usuário insere a hora manualmente, ele insere a hora local, não a hora da época Unix. O horário da época Unix atual é calculado usando o fuso horário atual para derivar um horário da época Unix.

Configuração

Os fabricantes de dispositivos podem configurar o serviço time_detector de várias maneiras, como quais origens usar e como priorizar os sinais delas.

Priorização de origem

A partir do Android 12, os fabricantes de dispositivos podem alterar o arquivo de configuração core/res/res/values/config.xml para especificar quais origens de horário incluir na detecção automática de horário e a prioridade com que time_detector considera essas origens.

Para dispositivos com Android 11 ou inferior, a prioridade de origem é codificada para ["telephony", "network"] , o que significa que as sugestões de telefonia são priorizadas acima das sugestões de rede.

A configuração padrão do AOSP é a seguinte:

<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
     take precedence over lower ones.
     See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
<string-array name="config_autoTimeSourcesPriority">
    <item>network</item>
    <item>telephony</item>
</string-array>

No Android 12, as sugestões de rede e telefonia são configuradas como origens a serem usadas por padrão. As sugestões de horário de rede são priorizadas acima das sugestões de horário de telefonia. Os fabricantes de dispositivos podem alterar a ordem das origens para voltar ao comportamento do Android 11 ou inferior, onde a telefonia tem maior prioridade.

Por padrão, se a sugestão válida de prioridade mais alta corresponder à hora atual do relógio do sistema do dispositivo em alguns segundos, a hora do dispositivo não será alterada. Isso evita a criação de trabalho para aplicativos instalados que ouvem a intenção ACTION_TIME_CHANGED .

Os valores de origem permitidos são:

Limites de tempo permitidos

O Android 14 introduz um limite de tempo superior para sugestões de tempo recebidas pelo serviço time_detector . Se o dispositivo suportar processos de 32 bits, a estrutura definirá um limite de tempo superior para evitar que o dispositivo use uma sugestão de tempo que possa desencadear o problema Y2038.

O Android 12 introduziu um limite de tempo menor que é usado para validar sugestões de tempo recebidas pelo serviço time_detector . O valor do limite de tempo inferior usado para sugestões automatizadas é definido no carimbo de data/hora do build. Isso funciona com base no princípio de que não pode haver um horário válido antes da criação da imagem do sistema do dispositivo. Se uma sugestão de tempo for anterior ao limite de tempo inferior, o serviço time_detector descartará a sugestão porque ela não poderá ser válida se o carimbo de data/hora da construção estiver correto.

Para dispositivos com Android 11 ou inferior, o serviço time_detector não valida sugestões de horário de época do Unix recebidas.

Tempo de depuração e teste

Esta seção fornece informações sobre como depurar e testar o comportamento do serviço time_detector e outros componentes que são compartilhados por todas as origens.

Interagindo com o serviço time_detector

Para visualizar a configuração do serviço time_detector e o estado do serviço time_detector , use:

adb shell cmd time_detector dump

Para ver comandos adicionais para depuração e teste de detecção de fuso horário, use:

adb shell cmd time_detector 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_detector para teste ou em produção. Para obter detalhes, consulte Configurando um dispositivo usando o serviço device_config .

Para validar a detecção automática de tempo, os testadores devem estar cientes de quais origens o serviço time_detector está usando. A seguir está um exemplo da saída do comando adb shell cmd time_detector dump , com as informações sobre a origem atual e o estado do serviço em negrito:

$ adb shell cmd time_detector dump

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=null
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=23717241
  mEnvironment.systemClockMillis()=1626707861336
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    ...
  Telephony suggestion history:
    ...
  Network suggestion history:
    ...
  Gnss suggestion history:
    ...
  External suggestion history:
    ...

As informações podem ser interpretadas da seguinte forma:

Chave Valor
mEnvironment.isAutoTimeDetectionEnabled() Se a detecção automática de hora está habilitada.
mEnvironment.autoTimeLowerBound() O limite inferior atual usado para validar sugestões de tempo.
mEnvironment.autoOriginPriorities() As origens em uso e a ordem de prioridade.

O log de alteração de horário indica ocasiões em que o serviço time_detector alterou o horário atual da época Unix do dispositivo.

As informações do histórico de sugestões indicam quais sugestões foram feitas por cada origem.

Detecção automática de fuso horário

Esta seção fornece uma visão geral do serviço time_zone_detector que gerencia a detecção automática de fuso horário, controles do usuário nas configurações, detecção de fuso horário de telefonia e localização e detalhes de teste.

O serviço time_zone_detector

O serviço time_zone_detector , presente em dispositivos com Android 11 ou superior, gerencia a detecção automática de fuso horário. Ele ajusta o fuso horário atual do dispositivo conforme necessário quando a detecção automática de fuso horário está habilitada.

Quando a detecção automática de fuso horário está habilitada, time_zone_detector pode estar em um dos dois estados: incerto e certo .

Quando o serviço time_zone_detector está em determinado estado, isso significa que o serviço time_zone_detector recebeu informações fortes de fuso horário, o que pode fazer com que ele substitua o fuso horário atual. Quando é incerto, significa que não recebeu nenhuma informação ou recebeu apenas informações de baixa confiança, o que significa que não substituirá o fuso horário atual.

Determinados estados do serviço time_zone_detector podem incluir aqueles em que time_zone_detector não possui informações de fuso horário para usar ou onde possui vários fusos horários para escolher. Esses estados são os seguintes:

  • Um determinado estado com fuso horário zero é inserido quando o dispositivo está em algum lugar sem fuso horário, como em águas internacionais ou em uma área disputada. Este estado é semelhante a um estado incerto, mas indica que time_zone_detector não precisa tomar mais medidas para tentar determinar o fuso horário.
  • Um determinado estado com vários fusos horários é inserido onde há ambigüidade ou condições de fronteira. Nesse estado, se o fuso horário atual for um dos fusos horários sobre os quais time_zone_detector tem certeza, o fuso horário atual será deixado como está. Caso contrário, será utilizado um dos fusos horários disponíveis. Isso dá ao time_zone_detector um elemento de aderência se o usuário tiver selecionado manualmente seu fuso horário anteriormente ou quando o dispositivo se aproximar de uma fronteira.

O estado certo ou incerto do serviço time_zone_detector é determinado por sugestões de fuso horário enviadas por um algoritmo .

Geralmente, as sugestões vêm em dois tipos que correspondem aos estados possíveis de time_zone_detector : certas e incertas . A seguir estão exemplos de tipos de sugestão:

  • tipo = uncertain , zoneIds = []

    • O algoritmo não sabe qual é o fuso horário.
  • type = certain , zoneIds = ["Europe/London"]

    • O algoritmo tem certeza de que a zona é Europa/Londres.
  • tipo = certain , zoneIds = [] `

    • O algoritmo é certo, mas não há ID de zona associado ao local atual.
  • type = certain , zoneIds = ["America/Denver", "America/Phoenix"]

    • O algoritmo tem certeza de que a resposta é uma das duas zonas, mas não pode escolher entre “América/Denver” e “América/Phoenix”.

O serviço time_zone_detector trata sequências de sugestões como distintas com base em seu algoritmo. Dependendo do algoritmo, as sugestões também podem conter metadados que indicam o quão certo é o algoritmo.

O serviço time_zone_detector tem estado, o que significa que mantém um registro das sugestões mais recentes feitas por cada algoritmo. Novas sugestões são enviadas ao serviço time_zone_detector caso uma sugestão anterior não esteja mais correta; isto é, se um algoritmo agora tiver uma sugestão diferente ou se tiver perdido a capacidade de detectar o fuso horário. O serviço time_zone_detector reavalia sugestões novas e existentes e atualiza o estado do dispositivo quando sugestões são recebidas.

O Android oferece suporte a dois algoritmos para detecção de fuso horário:

  • Telefonia
  • Localização

O serviço time_zone_detector normalmente usa um único algoritmo para determinar o fuso horário. Quando o algoritmo de localização é compatível com um dispositivo, o algoritmo usado pelo dispositivo é determinado com base nas configurações de fuso horário definidas pelo usuário. Quando o algoritmo em uso fica incerto quanto ao fuso horário, time_zone_detector geralmente não usa sugestões de um algoritmo diferente. Sugestões associadas a algoritmos que não estão em uso podem ser mantidas na memória por time_zone_detector , mas não são usadas a menos que o algoritmo seja alterado. Quando o usuário altera as configurações para detecção automática de fuso horário e o algoritmo muda, a sugestão mais recente disponível para o novo algoritmo é usada.

Para obter detalhes sobre a situação em que vários algoritmos são usados ​​para determinar o fuso horário, consulte Modo de fallback de telefonia .

Modo alternativo de telefonia

Em dispositivos com Android 13 e superior, o serviço time_zone_detector oferece suporte ao modo de fallback de telefonia . Este modo permite que o Android use sugestões de detecção de telefonia temporariamente em situações em que a detecção de localização não consegue detectar o fuso horário ou em que a detecção de localização leva mais tempo para detectar o fuso horário do que a detecção de telefonia.

O modo de fallback de telefonia se aplica a dispositivos onde a detecção de telefonia e localização é suportada e onde o usuário habilitou Usar localização para definir fuso horário em Configurações de fuso horário . O modo é ativado automaticamente quando um dispositivo é reiniciado e quando o modo avião é desativado.

No Android 14 e superior, o fallback de telefonia pode ser acionado por meio das APIs de relatório de status do LTZP , ou seja, se um LTZP relatar que é incerto e sua capacidade de detectar localização ou fuso horário for degradada por seu ambiente, o modo de fallback de telefonia será acionado.

Quando no modo de fallback de telefonia, o serviço time_zone_detector usa sugestões de telefonia como se a detecção de localização estivesse desabilitada até que o algoritmo de localização faça uma determinada sugestão. Após receber uma determinada sugestão, o modo fallback de telefonia é desativado e as sugestões de localização são utilizadas exclusivamente.

Para obter detalhes de configuração do modo de fallback de telefonia, consulte Configuração de detecção de fuso horário .

Configurações de fuso horário

Os usuários podem ativar e definir as configurações para detecção automática de fuso horário no aplicativo AOSP Settings.

Detecção automática de fuso horário em Configurações

Figura 2. Detecção automática de fuso horário em Configurações.

A tabela a seguir descreve os controles do usuário para detecção de fuso horário no aplicativo Configurações AOSP.

*No Android 11 e versões anteriores, essa configuração é rotulada como Usar fuso horário fornecido pela rede

Localização das configurações do AOSP Nome das configurações AOSP Escopo Comportamento
Sistema > Data e Hora Definir fuso horário automaticamente* Todos os usuários

Uma alternância.

Quando ativado , o dispositivo é responsável por detectar o fuso horário atual. Quando desativado , os usuários recebem controles para definir o fuso horário do dispositivo manualmente.

Sistema > Data e Hora Use a localização para definir o fuso horário Usuário atual

Uma alternância.

Disponível no Android 12. Essa alternância é exibida somente quando a detecção de fuso horário de localização é compatível com o dispositivo.

Para alterações introduzidas em 14, consulte Dispositivos que suportam apenas detecção de fuso horário de localização .

Localização Usar localização Usuário atual

Uma alternância.

Permite ou impede o uso geral da localização do dispositivo. O valor será relevante se a detecção de fuso horário do local for compatível com o dispositivo.

A seguir é apresentada uma visão geral do comportamento do dispositivo para detecção de fuso horário, de acordo com as configurações escolhidas pelo usuário:

  • [Data e hora] Definir fuso horário automaticamente: DESLIGADO

    • O usuário deve selecionar manualmente o fuso horário.
  • [Data e hora] Definir fuso horário automaticamente: LIGADO

    • [Localização] Usar localização: DESLIGADO

      • Sinais de telefonia são usados ​​para detectar o fuso horário.
    • [Localização] Usar localização: LIGADO

      • [Data e hora] Use a localização para definir o fuso horário: LIGADO

        • A localização é usada para detectar o fuso horário.
      • [Data e hora] Use a localização para definir o fuso horário: DESLIGADO

        • Sinais de telefonia são usados ​​para detectar o fuso horário.

Vários dispositivos de usuário

Como várias das configurações envolvidas têm como escopo o usuário atual, o comportamento de detecção de fuso horário de um dispositivo pode mudar quando o usuário atual muda em um dispositivo Android multiusuário.

A alternância Usar local para definir fuso horário tem como escopo o usuário atual e não é restrita pela política do dispositivo, o que significa que os usuários sempre podem alterar seu valor, mesmo quando a alternância Definir fuso horário automaticamente estiver desativada ou se outro horário ou fuso horário controlar são restritos pelo Device Policy Controller.

Dispositivos que suportam apenas o algoritmo de detecção de fuso horário de localização

Esta seção descreve o comportamento de dispositivos que suportam apenas o algoritmo de localização.

  • Android 14 e superior

    • A opção Usar localização não é mostrada aos usuários no aplicativo Configurações AOSP e o dispositivo se comporta como se a opção Usar localização estivesse habilitada.
    • O valor da configuração SettingsProvider com escopo do usuário location_time_zone_detection_enabled é ignorado. Este valor registra a preferência do usuário em outros tipos de dispositivos.
  • Android 12 ou Android 13

    • A opção Usar localização está visível para os usuários no aplicativo Configurações AOSP e os usuários podem desativar a opção. Se a opção estiver desabilitada, o dispositivo não detectará o fuso horário automaticamente.

Comportamento ao mudar de e para detecção automática

Quando o usuário muda a detecção de fuso horário de manual para automática , time_zone_detector pode já ter certeza do fuso horário atual. Nesse caso, como o usuário habilita a detecção automática, o fuso horário do dispositivo pode ser alterado ao mesmo tempo para corresponder à opinião do serviço time_zone_detector .

Da mesma forma, quando o usuário faz uma alteração nas configurações que resulta em uma alteração no algoritmo atual do serviço time_zone_detector , time_zone_detector pode já ter recebido sugestões para o novo algoritmo e, portanto, a hora do dispositivo pode ser alterada para corresponder à opinião do serviço time_zone_detector imediatamente.

Detecção de fuso horário de telefonia

A detecção de fuso horário de telefonia usa sinais de telefonia para determinar o fuso horário atual. Para obter mais informações, consulte Detecção de fuso horário de telefonia .

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

A detecção de fuso horário de localização está 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 sua localização para determinar o fuso horário atual.

O serviço location_time_zone_manager , introduzido no Android 12, é executado no servidor do sistema e contém o código responsável por enviar sugestões de algoritmos de localização ao serviço time_zone_detector . Para obter mais informações, consulte Detecção de fuso horário de local .

Considerações sobre adoção de recursos

Esta seção descreve aspectos do recurso de detecção de fuso horário de localização para ajudar um fabricante de dispositivo a determinar se deve adotar o recurso em um dispositivo.

Comparando telefonia e detecção de localização

A tabela a seguir fornece uma comparação das vantagens e desvantagens do uso de sinais de localização em vez de sinais de telefonia para detecção de fuso horário.

Detecção de telefonia Detecção de localização
Correção Varia de acordo com o país.

Depende da correção e disponibilidade do MCC, NITZ.
Depende da configuração do recurso ou dos componentes do plug-in.

A correção normalmente varia de acordo com:
  • Precisão e regularidade do provedor de localização.
  • A qualidade dos dados do mapa de fuso horário.
Capacidade de atualização A detecção de telefonia depende de arquivos contidos no módulo atualizável de dados de fuso horário (com.android.tzdata APEX). Depende da configuração do recurso ou dos componentes do plug-in.

A capacidade de atualização normalmente depende se o dispositivo usa dados de mapa de fuso horário do servidor ou do cliente.

Observação: os dados do mapa de fuso horário não estão contidos no módulo Dados de fuso horário usado para atualizar a cópia do TZDB do Android e outras informações de fuso horário.

Os fabricantes de dispositivos também devem considerar a consistência da versão entre as regras de fuso horário e os dados do mapa de fuso horário.
Uso de energia Nenhum ou baixo consumo de energia Depende das configurações de localização do usuário, dos plug-ins usados ​​e, normalmente, de quais outros aplicativos solicitam localização.
Disponibilidade Apenas dispositivos de telefonia. Geralmente requer um SIM funcional. A detecção de localização depende dos provedores de localização disponíveis.
Privacidade do usuário

O fuso horário preferido de um usuário geralmente é determinado pela sua localização geográfica. A localização é um dado sensível. Os usuários podem estar preocupados com o compartilhamento do conhecimento de sua localização como parte da detecção de fuso horário. Não relacionado à detecção de fuso horário, todos os aplicativos executados em um dispositivo podem ler o fuso horário atual do dispositivo sem exigir permissão do Android, e os aplicativos podem inferir uma ideia imprecisa da localização do dispositivo a partir dessas informações.

Mais especificamente, a detecção de fuso horário pode funcionar por meios passivos ou ativos:

  • Passivo: algo no ambiente do dispositivo informa ao dispositivo o fuso horário a ser usado naquele ambiente.
  • Ativo: O dispositivo precisa determinar o fuso horário por si mesmo e, dependendo das configurações de privacidade dos usuários e de seu consentimento, obtém a localização do dispositivo para fazer isso. Ele pode então compartilhar sua localização com serviços externos. Consulte a discussão abaixo para obter detalhes sobre privacidade e consentimento do usuário.

A detecção passiva, como acontece com o algoritmo de telefonia, não tem implicações adicionais de privacidade para os usuários.

A detecção ativa, como acontece com o algoritmo de localização, envolve a determinação da localização do dispositivo, com a qual os usuários podem não querer concordar, e a localização pode ser enviada por uma rede para determinar o ID do fuso horário.

A abordagem do Android à privacidade do usuário para detecção de fuso horário oferece ao usuário a capacidade de desabilitar individualmente algoritmos que devem estar ativos. Além disso, o código da plataforma AOSP não lida diretamente com a localização em si: a detecção de localização e o mapeamento da localização para IDs de fuso horário são deixados para componentes de plug-in configurados pelos fabricantes de dispositivos.

Para obter mais detalhes sobre os recursos de privacidade do usuário, consulte Detecção de fuso horário de localização .

Configuração

Os fabricantes de dispositivos podem configurar o serviço time_zone_detector para alterar seu comportamento. Esta seção descreve opções de configuração para o comportamento geral do serviço time_zone_detector . Para obter detalhes de configuração dos algoritmos de detecção de telefonia e fuso horário, consulte Detecção de fuso horário de telefonia e 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_supportTelephonyTimeZoneFallback true Quando true , time_zone_detector usa o modo de fallback de telefonia. Está disponível para Android 13 e superior.

Alterando o comportamento padrão do dispositivo

No AOSP, a detecção automática de fuso horário é habilitada por padrão com a configuração auto_time_zone definida como true . Para desativar a detecção automática de hora por padrão, configure o valor de def_auto_time_zone definido em frameworks/base/packages/SettingsProvider/res/values/defaults.xml como false .

Ao restaurar um backup de outro dispositivo, a estrutura atualiza o valor da configuração auto_time_zone por padrão. Se você quiser garantir que essa configuração não seja restaurada de um backup, inclua auto_time_zone na matriz restore_blocked_global_settings definida em frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml .

Depuração e teste de fuso horário

Esta seção fornece informações sobre como depurar e testar o comportamento do serviço time_zone_detector e outros componentes que são compartilhados por todos os algoritmos.

Configurando um dispositivo usando o serviço device_config

O serviço device_config é um mecanismo usado no Android para configurar comportamento modificável usando valores que normalmente são extraídos de um servidor remoto por código proprietário (não AOSP). Ao usar valores device_config para testes, especialmente durante testes manuais de longa execução, o dispositivo pode sincronizar os sinalizadores, o que redefiniria os sinalizadores e limparia os valores definidos para teste.

No Android 12 ou superior, para impedir temporariamente a sincronização de sinalizadores, use:

adb shell cmd device_config set_sync_disabled_for_tests persistent

Para restaurar a sincronização do sinalizador após os testes, use:

adb shell cmd device_config set_sync_disabled_for_tests none

Após restaurar a sincronização do sinalizador, reinicie o dispositivo.

Para obter mais informações, use $ adb shell cmd device_config help .

Interagindo com o serviço time_zone_detector

Para visualizar a configuração e o estado do time_zone_detector do serviço time_zone_detector , use:

adb shell cmd time_zone_detector dump

Para ver comandos adicionais para depuração e teste de detecção de fuso horário, use:

adb shell cmd time_zone_detector 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 serviço time_zone_detector para teste ou em produção. Para obter detalhes, consulte Configurando um dispositivo usando o serviço device_config .

Para validar a detecção de fuso horário, os testadores devem estar cientes de qual algoritmo o time_zone_detector está usando. Para entender e influenciar o algoritmo atual do time_zone_detector , use uma das seguintes opções:

  • Verifique visualmente por meio da IU de configurações. Para obter mais informações, consulte Configurações de fuso horário .
  • Use a linha de comando através do adb:

    • Para despejar o estado time_zone_detector , use adb shell cmd time_zone_detector dump
    • Para alterar a configuração do dispositivo, use outros comandos time_zone_detector . Para obter mais informações, use adb shell cmd time_zone_detector help .

A seguir está um exemplo da saída do comando adb shell cmd time_zone_detector dump , com as informações sobre o algoritmo atual e o estado do serviço em negrito:

$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
  mEnvironment.getCurrentUserId()=0
  mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
  [Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
  mEnvironment.isDeviceTimeZoneInitialized()=true
  mEnvironment.getDeviceTimeZone()=Europe/London
  Time zone change log:
  Manual suggestion history:
...
  Geolocation suggestion history:
...
  Telephony suggestion history:
...

As informações podem ser interpretadas da seguinte forma:

Chave Valor
mUserConfigAllowed Se o usuário é impedido de controlar as configurações de data e hora pelo Device Policy Controller .
mTelephonyDetectionSupported Se o dispositivo possui detecção de fuso horário de telefonia.
mGeoDetectionSupported Se o dispositivo suporta detecção de fuso horário de localização. Este é o estado efetivo baseado na configuração e na presença de pelo menos um LTZP.
mAutoDetectionEnabled Se a detecção automática de fuso horário está habilitada.
mLocationEnabled A alternância do local principal.
mGeoDetectionEnabled A opção de algoritmo: false indica o algoritmo de telefonia e true indica o algoritmo de localização.

As informações do histórico de sugestões indicam quais sugestões foram feitas através de Configurações (manual), e pelos algoritmos de telefonia e localização.