Nesta página, descrevemos como a detecção de hora e fuso horário funciona no Android. Isso inclui como o Android detecta automaticamente hora e fusos horários, opções de configuração para fabricantes de dispositivos e informações de teste.
Visão geral de hora e fusos horários
Para determinar a hora local de um usuário e mostrar em locais como a barra de status, o Android acompanha dois estados relacionados, mas independentes:
- O tempo Unix epoch atual
- O fuso horário atual
O horário de época do Unix e o fuso horário atuais são estados de todo o dispositivo, ou seja, são compartilhados por todos os usuários de um dispositivo.
O horário atual da época Unix não é um valor fixo. Ele é atualizado automaticamente para refletir a passagem do tempo. Além do tempo normal, a época Unix atual de um dispositivo é ajustada se for considerada incorreta, por exemplo, depois que um dispositivo perde energia.
O fuso horário atual determina o ajuste a ser feito para converter o horário atual da época Unix em um horário 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, ele subtrai 8 horas.
Para oferecer suporte a esses cálculos de horário local, todos os dispositivos Android têm um banco de dados com todas as regras de fuso horário global. Para mais informações sobre as 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, a época Unix atual não precisa ser ajustada, mas o usuário geralmente quer ver o horário local em vez do horário do local anterior. Mudar o fuso horário atual garante que o ajuste correto seja aplicado ao horário da época Unix atual para mostrar a hora local correta do 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 pelos seguintes mecanismos.
- Detecção automática de hora: garante que o dispositivo tenha a época Unix atual correta.
- Detecção automática de fuso horário: garante que o dispositivo tenha o fuso horário atual correto.
Detecção automática de horário
Esta seção oferece uma visão geral do serviço time_detector
, que gerencia a detecção automática de horário, os controles do usuário, as opções de configuração e os detalhes de teste.
O serviço time_detector
O serviço time_detector
, presente em dispositivos com Android 10 ou
mais recente, gerencia a detecção automática de horário. Ele ajusta o tempo atual da época Unix do dispositivo conforme necessário quando a detecção automática de horário está ativada.
O serviço time_detector
está sempre em um dos dois estados: certain
ou
uncertain
. O estado certo ou incerto do serviço é determinado pelas sugestões de horário que ele recebe de várias fontes.
Quando o serviço time_detector
tem certeza, ou seja, recebeu uma sugestão com informações de horário da época Unix, ele substitui o horário atual da época Unix se a sugestão for diferente.
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 muito antigas para serem usadas. A idade das sugestões é considerada porque os ajustes que usam sugestões de horário da época Unix dependem do relógio de tempo real decorrido no dispositivo, que é considerado impreciso em longos períodos.
Para estabelecer a hora atual da época Unix automaticamente, um dispositivo tem várias fontes que podem ser usadas. Neste documento, elas são chamadas de origens. O serviço
time_detector
trata sequências de sugestões como distintas com base na
origem delas.
O serviço time_detector
é com estado, o que significa que ele 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 tempo da época do Unix mais recentes
disponíveis. O serviço time_detector
reavalia sugestões novas e atuais
e atualiza o estado do dispositivo quando as sugestões são recebidas.
Embora o horário UTC seja acordado internacionalmente, há vários motivos para que estabelecer a época Unix atual nem sempre seja simples para um dispositivo Android:
- O horário da época Unix é um sistema de controle de tempo sutilmente diferente do horário UTC. Para converter entre os dois, é preciso saber quando os segundos bissextos ocorrem e como eles são processados pelas origens.
- As origens podem estar disponíveis apenas em determinados horários ou em certas 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 ter erros. Por exemplo, se uma torre de celular não estiver rastreando o horário UTC corretamente, a origem da telefonia poderá fornecer sugestões de horário imprecisas.
- Pode haver imprecisões introduzidas ao obter o tempo de época do Unix. Por exemplo, um atraso na rede, buffer ou agendamento de processos pode fazer com que o tempo da época Unix seja impreciso.
- O relógio de referência usado para ajustar uma sugestão de tempo decorrido desde que ela foi recebida pode estar impreciso.
Há duas origens principais de detecção de hora configuradas para uso por padrão no AOSP:
- Rede:usa servidores de horário do Network Time Protocol (NTP).
- Telefonia:usa sinais de telefonia de identidade de rede e fuso horário (NITZ).
As origens de telefonia e rede exigem conectividade com redes externas, que nem sempre estão disponíveis.
A partir do Android 12, o Android também é compatível com as origens a seguir, que não são configuradas para uso por padrão:
- GNSS:usa o provedor de localização GPS para receber uma hora de uma fonte GNSS.
- Externa:origem genérica que permite aos fabricantes de dispositivos integrar a própria fonte de tempo de época Unix.
Configurações de data
Os usuários podem ativar a detecção automática de hora em Sistema > Data e hora no app Configurações do AOSP.
Figura 1. Detecção automática de hora nas Configurações.
A tabela a seguir descreve os controles do usuário para detecção de hora no app Configurações do AOSP.
*No Android 11 e versões anteriores, essa configuração é chamada de Usar horário fornecido pela rede |
|||
Localização das configurações do AOSP | Nome das configurações do 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 desativada, os usuários têm controles para definir a hora do dispositivo manualmente. |
Quando o usuário insere a hora manualmente, ele digita a hora local, não a hora da época Unix. O tempo atual da época Unix é calculado usando o fuso horário atual para derivar um tempo 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 indicadores delas.
Priorização de origem
No Android 12, os fabricantes de dispositivos podem mudar o arquivo de configuração
core/res/res/values/config.xml
para especificar quais origens de tempo
incluir na detecção automática de horário e a prioridade em que
time_detector
considera essas origens.
Em dispositivos com Android 11 ou versões anteriores, a prioridade de origem é codificada como
["telephony", "network"]
, o que significa que as sugestões de telefonia têm prioridade
em relação às 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 para uso por padrão. As sugestões de horário de rede têm prioridade sobre as de horário de telefonia. Os fabricantes de dispositivos podem mudar a ordem das origens para reverter ao comportamento do Android 11 ou versões anteriores, em que a telefonia tem uma prioridade maior.
Por padrão, se a sugestão válida de maior prioridade corresponder ao horário atual do relógio do sistema do dispositivo em até alguns segundos, o horário do dispositivo não será alterado. Isso evita criar trabalho para apps instalados que escutam a intent
ACTION_TIME_CHANGED
.
Os valores de origem permitidos são:
Intervalos de tempo permitidos
O Android 14 introduz um limite superior do intervalo para sugestões de hora recebidas pelo serviço
time_detector
. Se o dispositivo for compatível com processos de 32 bits, a estrutura
definirá um limite máximo de tempo para evitar que o dispositivo use uma sugestão de horário que
possa acionar o problema do ano 2038.
O Android 12 introduziu um limite de tempo menor usado para validar sugestões de horário recebidas pelo serviço time_detector
. O valor do limite inferior de tempo usado para sugestões automáticas é definido com base no carimbo de data/hora da build. Isso funciona com base no princípio de que um horário válido não pode ser anterior à criação da imagem do sistema do dispositivo. Se uma sugestão de horário for anterior ao limite inferior, o serviço time_detector
vai descartar a sugestão porque ela não pode ser válida se o carimbo de data/hora do build
estiver correto.
Em dispositivos com Android 11 ou versões anteriores, o serviço time_detector
não
valida sugestões de tempo de época Unix recebidas.
Depuração e teste de tempo
Esta seção fornece informações sobre como depurar e testar o comportamento do
serviço time_detector
e outros componentes compartilhados por todas as origens.
Interagir com o serviço time_detector
Para conferir a configuração e o estado do serviço time_detector
, use:time_detector
adb shell cmd time_detector dump
Para ver outros comandos de depuração e teste da 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 de time_detector
em testes ou em produção.
Para mais detalhes, consulte Configurar um dispositivo usando o serviço device_config.
Para validar a detecção automática de hora, os testadores precisam saber quais origens o serviço time_detector
está usando. Confira um exemplo da saída do comando
adb shell cmd time_detector dump
, com as informações sobre a
origem e o estado do serviço atuais 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 maneira:
Chave | Valor |
---|---|
mEnvironment.isAutoTimeDetectionEnabled() |
Se a detecção automática de hora está ativada. |
mEnvironment.autoTimeLowerBound() |
O limite inferior atual usado para validar sugestões de horário. |
mEnvironment.autoOriginPriorities() |
As origens em uso e a ordem de prioridade. |
O registro de mudanças de horário indica ocasiões em que o serviço time_detector
mudou 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 oferece uma visão geral do serviço time_zone_detector
, que
gerencia a detecção automática de fuso horário, os controles do usuário nas configurações, a detecção de fuso horário por telefonia e
localização, além de detalhes de teste.
O serviço time_zone_detector
O serviço time_zone_detector
, presente em dispositivos com Android 11 ou
mais recente, 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á ativada.
Quando a detecção automática de fuso horário está ativada, time_zone_detector
pode estar em um dos dois estados: certain
e uncertain
.
Quando o serviço time_zone_detector
está em um determinado estado, isso significa que ele recebeu informações precisas sobre o fuso horário, o que pode fazer com que ele substitua o fuso horário atual.time_zone_detector
Quando a resposta é incerta, isso significa que o modelo não recebeu informações ou recebeu informações de baixa confiança, o que significa que ele não vai substituir o fuso horário atual.
Alguns estados do serviço time_zone_detector
podem incluir situações em que time_zone_detector
não tem informações de fuso horário para usar ou em que há vários fusos horários para escolher. Estes são os estados:
- Um determinado estado com zero fusos horários é inserido quando o dispositivo está em algum lugar sem um fuso horário, como em águas internacionais ou em uma área disputada.
Esse estado é semelhante a um estado incerto, mas indica que
time_zone_detector
não precisa realizar mais ações para tentar determinar o fuso horário. - Um determinado estado com vários fusos horários é inserido quando há ambiguidade ou condições de fronteira. Nesse estado, se o fuso horário atual for um dos que o
time_zone_detector
tem certeza, ele será mantido. Caso contrário, um dos fusos disponíveis será usado. Isso dá aotime_zone_detector
um elemento de permanência se o usuário tiver selecionado manualmente o fuso horário antes ou quando o dispositivo se aproximar de uma borda.
O estado certo ou incerto do serviço time_zone_detector
é determinado por sugestões de fuso horário enviadas por um algoritmo.
Em geral, as sugestões vêm em dois tipos que correspondem aos estados possíveis de time_zone_detector
: certain
e uncertain
. Confira alguns exemplos de tipos de sugestão:
type =
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 é Europe/London.
type =
certain
,zoneIds = []
`- O algoritmo tem certeza, mas não há um 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 consegue escolher entre America/Denver e America/Phoenix.
O serviço time_zone_detector
trata sequências de sugestões como distintas com base no algoritmo delas. Dependendo do algoritmo, as sugestões também podem conter metadados que indicam o nível de certeza do algoritmo.
O serviço time_zone_detector
é com estado, o que significa que ele mantém um registro
da sugestão mais recente feita por cada algoritmo. Novas sugestões são enviadas ao serviço time_zone_detector
se uma sugestão anterior não estiver mais correta. Ou seja, se um algoritmo tiver uma sugestão diferente ou se ele tiver perdido a capacidade de detectar o fuso horário. O serviço time_zone_detector
reavalia sugestões novas e atuais e atualiza o estado do dispositivo quando elas são recebidas.
O Android é compatível com dois algoritmos para detecção de fuso horário:
- Telefonia
- Local
O serviço time_zone_detector
geralmente usa um único algoritmo para determinar o fuso horário. Quando o algoritmo de localização é compatível com um dispositivo, o algoritmo usado é determinado com base nas configurações de fuso horário definidas pelo usuário. Quando o algoritmo em uso fica incerto sobre o fuso horário, o time_zone_detector
geralmente não usa sugestões de um algoritmo diferente. As 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
mude. Quando o usuário muda as configurações de 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 detalhes sobre a situação em que vários algoritmos são usados para determinar o fuso horário, consulte Modo de substituição de telefonia.
Modo de substituição de telefonia
Em dispositivos com Android 13 e versões mais recentes, o serviço time_zone_detector
oferece suporte ao modo de fallback de telefonia. Esse modo permite que o Android use sugestões de detecção de telefonia
temporariamente em situações em que a localização não pode
detectar o fuso horário ou quando determinar a localização demora mais do que detectar
a telefonia para definir o fuso horário.
O modo de substituição de telefonia se aplica a dispositivos em que a detecção de telefonia e localização é compatível e em que o usuário ativou a opção Usar localização para definir o fuso horário nas Configurações de fuso horário. O modo é ativado automaticamente quando um dispositivo é reinicializado e quando o modo avião é desativado.
No Android 14 e em versões mais recentes, o fallback de telefonia pode ser acionado pelas APIs de status do LTZP. Ou seja, se um LTZP informar que está incerto e a capacidade de detectar a localização ou o fuso horário estiver degradada pelo ambiente, o modo de fallback de telefonia será acionado.
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 desativada até que o algoritmo de localização
faça uma determinada sugestão. Depois de receber uma determinada sugestão, o modo de fallback de telefonia
é desativado, e as sugestões de local são usadas exclusivamente.
Para detalhes de configuração do modo de substituição de telefonia, consulte Configuração de detecção de fuso horário.
Configurações de fuso horário
Os usuários podem ativar e configurar as configurações de detecção automática de fuso horário no app Configurações do AOSP.
Figura 2. Detecção automática de fuso horário nas configurações.
A tabela a seguir descreve os controles do usuário para detecção de fuso horário no app Configurações do AOSP.
*No Android 11 e versões anteriores, essa configuração é chamada de Usar fuso horário fornecido pela rede |
|||
Localização das configurações do AOSP | Nome das configurações do AOSP | Escopo | Comportamento |
---|---|---|---|
Sistema > Data e hora | Definir fuso horário automaticamente* | Todos os usuários | Uma alternância. Quando ativada, o dispositivo é responsável por detectar o fuso horário atual. Quando a opção está desativada, os usuários têm controles para definir o fuso horário do dispositivo manualmente. |
Sistema > Data e hora | Usar a localização para definir o fuso horário | Usuário atual | Uma alternância. Disponível no Android 12. Essa chave só aparece quando o dispositivo é compatível com a detecção de fuso horário do local. Para conferir as mudanças apresentadas no Android 14, consulte Dispositivos que oferecem suporte apenas para detecção de fuso horário do local. |
Local | Usar local | Usuário atual | Uma alternância. Permite ou impede o uso da localização do dispositivo em geral. O valor é relevante se a detecção de fuso horário do local for compatível com o dispositivo. |
A seguir, você confere uma visão geral do comportamento do dispositivo para a detecção de fuso horário de acordo com as configurações escolhidas pelo usuário:
[Data e hora] Definir fuso horário automaticamente:DESATIVADO
- O usuário precisa selecionar o fuso horário manualmente.
[Data e hora] Definir fuso horário automaticamente:ATIVADO
[Localização] Usar local: DESATIVADO
- Os indicadores de telefonia são usados para detectar o fuso horário.
[Localização] Usar localização:ATIVADO
[Data e hora] Usar a localização para definir o fuso horário:ATIVADO
- A localização é usada para detectar o fuso horário.
[Data e hora] Usar a localização para definir o fuso horário:DESATIVADO
- Os indicadores de telefonia são usados para detectar o fuso horário.
Vários dispositivos de usuário
Como várias das configurações envolvidas são definidas para 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 opção Usar a localização para definir o fuso horário é definida para o usuário atual e não é restrita pela política do dispositivo. Isso significa que os usuários podem sempre mudar o valor dela, mesmo quando a opção Definir fuso horário automaticamente está desativada ou se outros controles de hora ou fuso horário são restritos pelo Controlador de políticas do dispositivo.
Dispositivos que oferecem suporte apenas para o algoritmo de detecção de fuso horário do local
Esta seção descreve o comportamento de dispositivos que oferecem suporte apenas ao algoritmo de localização.
Android 14 e versões mais recentes
- A opção Usar localização não é mostrada aos usuários no app Configurações do AOSP, e o dispositivo se comporta como se a opção Usar localização estivesse ativada.
- O valor da configuração
SettingsProvider
no escopo do usuáriolocation_time_zone_detection_enabled
é ignorado. Esse valor registra a preferência do usuário em outros tipos de dispositivos.
Android 12 ou Android 13
- A opção Usar localização fica visível para os usuários no app Configurações do AOSP, e eles podem desativá-la. Se a opção estiver desativada, o dispositivo não vai detectar o fuso horário automaticamente.
Comportamento ao mudar para e da detecção automática
Quando o usuário muda a detecção de fuso horário de manual para automática,
o time_zone_detector
já pode ter certeza do fuso horário atual. Se sim, à medida que o usuário ativa 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 mudança nas configurações que resulta em uma mudança no algoritmo atual do serviço time_zone_detector
, é possível que o time_zone_detector
já tenha recebido sugestões para o novo algoritmo. Assim, o horário do dispositivo pode ser alterado imediatamente para corresponder à opinião do serviço time_zone_detector
.
Detecção de fuso horário por telefonia
A detecção de fuso horário por telefonia usa sinais de telefonia para determinar o fuso horário atual. Para mais informações, consulte Detecção do fuso horário de telefonia.
Detecção do fuso horário do local
A detecção do fuso horário do local está disponível no Android 12 ou versões mais recentes. É um recurso opcional de detecção automática de fuso horário que permite que os dispositivos usem a 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 algoritmo de localização ao serviço time_zone_detector
. Para mais informações, consulte Detecção do fuso horário do local.
Considerações sobre a implementação de recursos
Esta seção descreve aspectos do recurso de detecção de fuso horário local para ajudar um fabricante de dispositivos a determinar se deve adotar o recurso em um dispositivo.
Comparar a telefonia e a detecção de local
A tabela a seguir compara as vantagens e desvantagens de usar a localização em vez de sinais de telefonia para detecção de fuso horário.
Categoria | Detecção de telefonia | Detecção de local |
---|---|---|
Exatidão | Varia de acordo com o país. Depende da MCC, da correção e da disponibilidade do NITZ. |
Depende da configuração do recurso ou dos componentes do plug-in. A correção geralmente varia de acordo com:
|
Capacidade de atualização | A detecção de telefonia depende de arquivos contidos no módulo de dados de fuso horário atualizável
(com.android.tzdata APEX). |
Depende da configuração do recurso ou dos componentes do plug-in. A capacidade de atualização geralmente depende de o dispositivo usar dados de mapa de fuso horário do servidor ou do cliente. Os dados do mapa de fuso horário não estão contidos no módulo de dados de fuso horário usado para atualizar a cópia do Android do TZDB e outras informações de fuso horário. Os fabricantes de dispositivos também precisam 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 uso de energia | Depende das configurações de localização do usuário, dos plug-ins usados e, normalmente, de quais outros apps solicitam localização. |
Disponibilidade | Apenas dispositivos de telefonia. Geralmente requer um chip SIM funcionando. | A detecção de local depende dos provedores de localização disponíveis. |
Privacidade do usuário
O fuso horário preferido de um usuário geralmente é determinado pela localização geográfica dele. A localização é um dado sensível. Os usuários podem se preocupar com o compartilhamento do local deles como parte da detecção de fuso horário. Sem relação com a detecção de fuso horário, todos os apps em execução em um dispositivo podem ler o fuso horário atual do dispositivo sem exigir uma permissão do Android. Além disso, os apps podem inferir uma ideia imprecisa da localização do dispositivo com base nessas informações.
Mais especificamente, a detecção de fuso horário pode funcionar de maneira passiva ou ativa:
- Passivo: algo no ambiente do dispositivo informa o fuso horário a ser usado.
- Ativo: o dispositivo precisa determinar o fuso horário por conta própria e, dependendo das configurações de privacidade e do consentimento dos usuários, obtém a localização do dispositivo para fazer isso. Em seguida, ele pode compartilhar a localização com serviços externos. Confira a discussão abaixo para saber mais sobre privacidade e consentimento do usuário.
A detecção passiva, como com o algoritmo de telefonia, não tem implicações adicionais de privacidade para os usuários.
A detecção ativa, como com o algoritmo de localização, envolve determinar a localização do dispositivo, o que os usuários podem não querer aceitar, e a localização pode ser enviada por uma rede para determinar o ID do fuso horário.
A abordagem do Android para a privacidade do usuário na detecção de fuso horário dá ao usuário a capacidade de desativar individualmente os algoritmos que devem estar ativos. Além disso, o código da plataforma AOSP não lida diretamente com o local em si: a detecção de local e o mapeamento do local para IDs de fuso horário são deixados para componentes de plug-in configurados pelos fabricantes de dispositivos.
Para mais detalhes sobre recursos de privacidade do usuário, consulte Detecção do fuso horário do local.
Configuração
Os fabricantes de dispositivos podem configurar o serviço time_zone_detector
para mudar
o comportamento dele. Esta seção descreve as opções de configuração para o comportamento geral do serviço time_zone_detector
. Para 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 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_supportTelephonyTimeZoneFallback |
true |
Quando true , time_zone_detector usa o modo de
fallback de telefonia. Esse recurso está disponível para o Android 13 e versões mais recentes.
|
Alterar o comportamento padrão do dispositivo
No AOSP, a detecção automática de fuso horário é ativada 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, defina 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, o framework 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
Nesta seção, você encontra informações sobre como depurar e testar o comportamento do
serviço time_zone_detector
e outros componentes compartilhados por todos os
algoritmos.
Configurar um dispositivo usando o serviço device_config
O serviço device_config
é um mecanismo usado no Android para configurar
comportamentos modificáveis usando valores que geralmente são extraídos de um servidor remoto
por código proprietário (não AOSP). Ao usar valores device_config
para testes,
principalmente durante testes manuais de longa duração, o dispositivo pode sincronizar as
flags, o que as redefiniria e limparia os valores definidos para teste.
No Android 12 ou versões mais recentes, para impedir temporariamente a sincronização de flags, use:
adb shell cmd device_config set_sync_disabled_for_tests persistent
Para restaurar a sincronização de flags após os testes, use:
adb shell cmd device_config set_sync_disabled_for_tests none
Depois de restaurar a sincronização de flags, reinicie o dispositivo.
Para mais informações, use $ adb shell cmd device_config help
.
Interagir com o serviço time_zone_detector
Para conferir a configuração e o estado do serviço time_zone_detector
, use:time_zone_detector
adb shell cmd time_zone_detector dump
Para ver outros comandos de depuração e teste da 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
em testes ou em produção. Para mais detalhes, consulte Configurar um dispositivo usando o serviço
device_config.
Para validar a detecção de fuso horário, os testadores precisam saber 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 na interface das Configurações. Para mais informações, consulte Configurações de fuso horário.
Use a linha de comando pelo adb:
- Para fazer um dump do estado
time_zone_detector
, useadb shell cmd time_zone_detector dump
- Para alterar a configuração do dispositivo, use outros comandos
time_zone_detector
. Para mais informações, useadb shell cmd time_zone_detector help
.
- Para fazer um dump do estado
Confira abaixo 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 maneira:
Chave | Valor |
---|---|
mUserConfigAllowed |
Se o usuário está impedido de controlar as configurações de data e hora pelo Device Policy Controller. |
mTelephonyDetectionSupported |
Se o dispositivo tem detecção de fuso horário por telefonia. |
mGeoDetectionSupported |
Se o dispositivo é compatível com a detecção de fuso horário do local. Esse é o estado efetivo com base na configuração e na presença de pelo menos uma LTZP. |
mAutoDetectionEnabled |
Se a detecção automática de fuso horário está ativada. |
mLocationEnabled |
A chave principal de ativação/desativação de localização. |
mGeoDetectionEnabled |
A troca 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 em "Configurações" (manual) e pelos algoritmos de telefonia e localização.