A detecção automática de hora recebe sugestões de várias fontes, seleciona a melhor opção e define o relógio do sistema no Android para corresponder. As versões anteriores do Android ofereciam duas maneiras de definir a data e a hora: manualmente por usuário ou por detecção automática de hora, e definidas por uma destas opções:
telephonyusa sinais de telefonia de identidade e fuso horário de rede (NITZ, na sigla em inglês).networkusa servidores de horário do Network Time Protocol (NTP).
Cada opção exige conexões com redes externas, que nem sempre estão disponíveis no Android Automotive. Por exemplo, em alguns países, alguns carros podem não ter telefonia integrada. Portanto, o horário dos Sistemas Globais de Navegação por Satélite (GNSS, na sigla em inglês) é fornecido como uma fonte de horário do sistema para você usar quando a conectividade de rede não estiver disponível.
Esta versão do Android oferece mais duas opções para detectar e definir a hora automaticamente:
gnssusa Sistemas Globais de Navegação por Satélite (GNSS).externalusa uma propriedade VHAL ou a API do sistema.
Ativar a detecção automática de hora
Para ativar a detecção automática de hora, selecione Configurações > Data e hora > Data e hora automáticas:

Figura 1. Selecione "Data e hora automáticas"
Configurar fontes de hora
Para especificar quais fontes de hora incluir na detecção automática de hora e a prioridade em que essas fontes devem ser consideradas, modifique o arquivo de configuração de recursos do dispositivo, core/res/res/values/config.xml:
<!-- 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>telephony</item>
<item>network</item>
</string-array>Neste exemplo, telephony e network são considerados na detecção automática de hora, e as sugestões de hora telephony são priorizadas em relação às sugestões de hora network.
De modo geral, as sugestões de uma fonte de maior prioridade são ignoradas se forem inválidas ou muito antigas. Além disso, se a sugestão válida de maior prioridade corresponder ao horário atual do relógio do sistema do dispositivo em vários segundos (o valor padrão é dois (2) segundos), o horário não será alterado.
Limite inferior de tempo
O Android 12 oferece um novo limite inferior de tempo para usar ao validar sugestões de hora. Antes desse recurso, a detecção automática de hora não validava o horário UTC sugerido. Com esse recurso, os horários que expiram antes do limite inferior são descartados.
O valor do limite inferior é determinado por uma data derivada do carimbo de data/hora da build. Isso funciona com o princípio de que um horário válido não pode ocorrer antes da criação da imagem do sistema. O Android não aplica um limite superior.
Sugestões de horário do GNSS
A fonte de horário gnss é nova no Android 12 e é fornecida por sinais de GPS. Essa é uma fonte confiável de horário quando telephony e network não estão disponíveis.
Essa opção é adicionada ao novo GnssTimeUpdateService no SystemServer, que detecta atualizações de localização de forma passiva. Quando um local válido é recebido, GnssTimeUpdateService faz uma sugestão para TimeDetectorService, que determina se o relógio do sistema precisa ser atualizado.
Por padrão, a fonte de horário gnss não está ativada no AOSP e, portanto, precisa ser ativada pelos parceiros:
<!-- 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>telephony</item>
<item>network</item>
<item>gnss</item>
</string-array>
<!-- Enables the GnssTimeUpdate service. This is the global switch for enabling Gnss time based
suggestions to TimeDetector service. See also config_autoTimeSourcesPriority. -->
<bool name="config_enableGnssTimeUpdateService">true</bool>Para ativar esse recurso:
- Atualize
config_enableGnssTimeUpdateService. O valor deconfig_enableGnssTimeUpdateServiceprecisa ser definido comotrue. - Atualize
config_autoTimeSourcesPriority.gnssprecisa ser adicionado à lista de itens deconfig_autoTimeSourcesPriority. A posição degnssna lista de prioridade determina a prioridade dada às sugestões do GNSS em relação aos valores de outras fontes.
Impacto na energia
GnssTimeUpdateService detecta atualizações de localização de forma passiva, o que significa que ele nunca ativa o GPS para consumir mais energia. Como resultado, a energia consumida quando a fonte GNSS está ativada é insignificante. Isso também significa que, a menos que outro app ou serviço no sistema solicite ativamente atualizações de localização, GnssTimeUpdateService não receberá uma atualização de localização e sugerirá um horário do GNSS.
Teste
Conjunto de teste de compatibilidade (CTS)
Um teste do CTS é fornecido para verificar se um horário fornecido pelo GNSS está disponível. Para mais detalhes, consulte LocationShellCommand.java.
Testes de unidade
Consulte os testes de unidade básicos no arquivo a seguir:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
Testes manuais
Para testar esse recurso, novos comandos foram adicionados a LocationShellCommand.java. Use esses comandos para adicionar provedores de teste com os quais você pode especificar um local e o horário do GNSS associado.
GnssTimeUpdateService detecta essas atualizações de localização e faz sugestões periodicamente.
Observação:a interface desses comandos pode mudar entre as versões.
# Enable Master Location Switch in the foreground user (usually user 10 on automotive). # If you just flashed, this can be done through Setup Wizard. adb shell cmd location set-location-enabled true --user 10 # Add GPS test provider (this usually fails the first time and will throw a SecurityException # with "android from <some-uid> not allowed to perform MOCK_LOCATION".) adb shell cmd location providers add-test-provider gps # Enable mock location permissions for previous UID adb shell appops set <uid printed in previous error> android:mock_location allow # Add GPS test provider (Should work with no errors.) adb shell cmd location providers add-test-provider gps # Enable GPS test provider adb shell cmd location providers set-test-provider-enabled gps true # Set location with time (time can't be earlier than the limit set by the lower bound.) adb shell cmd location providers set-test-provider-location gps --location <LATITUDE>,<LONGITUDE> --time <TIME>
Sugestões de horário externo
As sugestões de horário externo são outra maneira de fornecer sugestões de horário automáticas para o Android. Essa nova opção permite que você forneça sugestões de horário totalmente personalizadas para o Android, que podem ser originadas de várias ECUs que, por sua vez, podem usar uma combinação de um relógio em tempo real, GNSS, NITZ ou qualquer outra fonte de horário.
As seguintes sugestões estão disponíveis no Android 12 para serem consideradas como external
sugestões de horário:
- Propriedades VHAL. Uma nova
propriedade VHAL
chamada
EPOCH_TIMEé fornecida. Essa propriedade indica o número de milissegundos decorridos desde 1/1/1970 UTC. O valor dela pode ser transmitido para o AndroidTimeManagerpara sugerir um novo horário do sistema. Uma implementação de amostra do VHAL que atualiza essa propriedade é fornecida na página de implementação de referência. - APIs do sistema. Um novo método chamado
suggestExternalTime()está disponível no TimeManager para fornecer ao sistema uma sugestão de horário externo. Se o sistema estiver configurado para considerar sugestões de horário externo (usandoconfig_autoTimeSourcesPriorityno arquivo de configuração), o carimbo de data/hora transmitido para esse método será usado para definir o horário do sistema se não houver sugestões de horário de maior prioridade disponíveis.
É possível implementar uma solução de horário externo conforme descrito abaixo:
- Atualize o arquivo de configuração de recursos (
core/res/res/values/config.xml) e adicione o valorexternalaconfig_autoTimeSourcesPriority:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>Isso instrui o Android a dar a maior prioridade às sugestões de horário externo ao definir o relógio do sistema. O hardware do veículo grava uma sugestão de carimbo de data/hora na nova
EPOCH_TIMEpropriedade VHAL. - Um app fornecido pelo fornecedor lê essa propriedade e chama
TimeManager.suggestExternal(). O Android pode usar o carimbo de data/hora fornecido como o novo valor do relógio do sistema.