A detecção automática de hora recebe sugestões de hora de várias fontes, seleciona a melhor opção e, em seguida, ajusta o relógio do sistema no Android para corresponder. As versões anteriores do Android forneciam duas maneiras de definir data e hora, definidas manualmente por usuário ou por detecção automática de hora, e definidas por uma destas opções:
-
telephony
usa sinais de telefonia de identidade de rede e fuso horário (NITZ). -
network
usa servidores de horário Network Time Protocol (NTP).
Cada opção requer 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, a hora dos Sistemas Globais de Navegação por Satélite (GNSS) é fornecida como uma fonte de hora do sistema para você usar quando a conectividade de rede não estiver disponível.
Esta próxima versão do Android oferece mais duas opções para detectar e definir a hora automaticamente:
-
gnss
usa Sistemas Globais de Navegação por Satélite (GNSS). -
external
usa uma propriedade VHAL ou a API do sistema.
Ativar 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 horário
Para especificar quais fontes de tempo incluir na detecção automática de tempo e a prioridade em que essas fontes de tempo devem ser consideradas, você deve modificar 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 consideradas na detecção automática de horário e as sugestões de horário telephony
são priorizadas antes das sugestões de horário network
.
De modo geral, sugestões de uma fonte de prioridade mais alta serão ignoradas se a sugestão for inválida ou se for muito antiga. Além disso, se a sugestão válida de prioridade mais alta corresponder à hora atual do relógio do sistema do dispositivo dentro de alguns segundos (o valor padrão é dois (2) segundos), a hora não será alterada.
Menor limite de tempo
O Android 12 oferece um novo limite de tempo inferior para uso na validação de sugestões de tempo. Antes desse recurso, a detecção automática de hora não validava a hora UTC de entrada sugerida. Com esse recurso, os tempos decorridos antes do limite inferior são descartados.
O valor do limite inferior é determinado a partir de uma data derivada do carimbo de data/hora da construção. Isso funciona com base no 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 impõe um limite superior.
Sugestões de horário GNSS
A fonte de tempo gnss
é nova no Android 12 e é fornecida por sinais GPS. Esta é uma fonte confiável para momentos em que telephony
e network
não estão disponíveis. Esta opção é adicionada ao novo GnssTimeUpdateService
no SystemServer que escuta passivamente as atualizações de localização. Quando um local válido é recebido, GnssTimeUpdateService
faz uma sugestão ao TimeDetectorService
, que então determina se o relógio do sistema deve ser atualizado.
Por padrão, a fonte de horário gnss
não está habilitada no AOSP e, portanto, deve ser habilitada 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 este recurso:
- Atualize
config_enableGnssTimeUpdateService
. O valor paraconfig_enableGnssTimeUpdateService
deve ser configurado comotrue
. - Atualize
config_autoTimeSourcesPriority
.gnss
deve ser adicionado à lista de itens paraconfig_autoTimeSourcesPriority
. A posição dognss
na lista de prioridades determina a prioridade dada às sugestões GNSS, em relação aos valores de outras fontes.
Impacto no poder
GnssTimeUpdateService
escuta passivamente as atualizações de localização, o que significa que ele nunca liga ativamente o GPS para consumir energia adicional. Como resultado, a energia consumida quando a fonte GNSS está habilitada é insignificante. Isso também significa que, a menos que outro aplicativo 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 GNSS.
Teste
Conjunto de testes de compatibilidade (CTS)
Um teste CTS é fornecido para verificar se um horário fornecido pelo GNSS está disponível. Para obter detalhes, consulte LocationShellCommand.java
.
Testes unitários
Veja os testes de unidade básicos no seguinte arquivo:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
Testes manuais
Para testar esse recurso, novos comandos foram adicionados ao LocationShellCommand.java
. Use esses comandos para adicionar provedores de teste com os quais você pode especificar um local e o horário GNSS associado. GnssTimeUpdateService
escuta essas atualizações de localização e faz sugestões periodicamente.
Nota: 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
Sugestões de horário externas são outra forma de fornecer sugestões automáticas de horário ao Android. Essas novas opções permitem fornecer sugestões de horário totalmente customizadas para Android, que podem ser provenientes de diversas ECUs que, por sua vez, podem usar uma combinação de relógio em tempo real, GNSS, NITZ ou qualquer outra fonte de horário.
As sugestões a seguir estão disponíveis no Android 12 para serem consideradas como sugestões de horário external
:
- Propriedades VHAL. Uma nova propriedade VHAL chamada
EPOCH_TIME
é fornecida. Esta propriedade denota o número de milissegundos decorridos desde 01/01/1970 UTC. Seu valor pode ser passado ao AndroidTimeManager
para sugerir um novo horário do sistema. Um exemplo de implementação VHAL que atualiza esta propriedade é fornecido na implementação de referência abaixo. - 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 levar em consideração sugestões de horário externas (usandoconfig_autoTimeSourcesPriority
no arquivo de configuração), o carimbo de data/hora passado para este método será usado para definir a hora do sistema, se não houver sugestões de horário de maior prioridade disponíveis.
Você pode 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 valorexternal
aconfig_autoTimeSourcesPriority
:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>
Isso instrui o Android a dar às sugestões de horário externo a mais alta prioridade ao definir o relógio do sistema. O hardware do veículo grava uma sugestão de carimbo de data/hora na nova propriedade
EPOCH_TIME
VHAL . - Um aplicativo fornecido pelo fornecedor lê essa propriedade e chama
TimeManager.suggestExternal()
. O Android pode então usar o carimbo de data/hora fornecido como o novo valor do relógio do sistema.