Detecção automática de hora

A detecção automática de hora recebe sugestões de horário de várias fontes, seleciona o a melhor opção e, em seguida, define o relógio do sistema no Android de acordo. Versões anteriores do Android fornecidas duas formas de definir a data e a hora, seja manualmente por usuário ou por detecção automática de hora, e definir uma destas opções:

  • O telephony usa sinais de telefonia de identidade de rede e fuso horário (NITZ, na sigla em inglês).
  • O network usa 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 Automotivo. Por exemplo, em alguns países, alguns carros podem não ter telefonia integrada. Portanto, O horário do sistema de Sistemas de Navegação por Satélite (GNSS, na sigla em inglês) é fornecido como uma fonte de informações quando a conectividade de rede estiver indisponível.

Esta próxima versão do Android oferece mais duas opções para detectar e definir horários automaticamente:

  • O gnss usa o Global Satélite GNSS (Sistemas de Navegação).
  • external usos uma propriedade VHAL ou a API do sistema.

Ativar a detecção automática de tempo

Para ativar a detecção automática de hora, selecione Configurações > Data e Tempo > Data e configuração automáticas Tempo:

Figura 1. Selecione "Data e hora automáticas" Horário

Configurar origens de horário

Para especificar quais fontes de tempo serão incluídas na detecção automática de tempo e a prioridade em que essas fontes de tempo devem ser consideradas, é preciso modificar o recurso do dispositivo arquivo de configuração, 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 em detecção automática de horário e telephony sugestões de horário são priorizadas à frente de network sugestões de horário.

De modo geral, as sugestões de uma fonte de maior prioridade são ignoradas se a sugestão é inválido ou se a sugestão for muito antiga. Além disso, se a sugestão válida de maior prioridade corresponde à hora atual do relógio do sistema do dispositivo em alguns segundos (o valor padrão for de dois (2) segundos), o tempo não será alterado.

Limite de tempo inferior

O Android 12 oferece um novo limite de tempo menor para usar quando: validando sugestões de horário. Antes desse recurso, a detecção automática de tempo não validava o horário UTC de entrada sugerido. Com esse recurso, os tempos decorridos antes do limite inferior são descartadas.

O valor do limite mínimo é determinado a partir de uma data derivada do carimbo de data/hora do build. Isso funciona o princípio de que um tempo válido não pode ocorrer antes da criação da imagem do sistema. O Android não aplicar um limite superior.

Sugestões de horário do GNSS

A origem de horário gnss é nova no Android 12 e é fornecida por sinais de GPS. Isso é uma fonte confiável para o horário em que telephony e network não estão disponíveis. Essa opção foi adicionada ao novo GnssTimeUpdateService no SystemServer que detecta passivamente as atualizações de localização. Quando um local válido é recebido, GnssTimeUpdateService faz uma sugestão para TimeDetectorService, que e determina se o relógio do sistema deve ser atualizado.

Por padrão, a origem de horário gnss não está ativada no AOSP. Portanto, precisam ser ativados 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:

  1. Atualize o config_enableGnssTimeUpdateService. O valor de config_enableGnssTimeUpdateService precisa ser definido como true.
  2. Atualize o config_autoTimeSourcesPriority. gnss precisa ser adicionado ao lista de itens para config_autoTimeSourcesPriority. Posição de gnss na lista de prioridades determina a prioridade dada às sugestões GNSS, em relação aos valores de outras fontes.

Impacto na energia

O GnssTimeUpdateService detecta passivamente as atualizações de localização, o que significa que nunca liga ativamente o GPS para consumir mais energia. Como resultado, a energia consumida ao se a origem GNSS está ativada é insignificante. Isso também significa que, a menos que outro app ou serviço o sistema solicita ativamente atualizações de localização, o GnssTimeUpdateService não terá acesso ao local atualizar e sugerir um horário GNSS.

Teste

Conjunto de teste de compatibilidade (CTS)

Um teste CTS é fornecido para verificar se um horário fornecido pelo GNSS está disponível. Para mais detalhes, consulte LocationShellCommand.java:

Testes de unidade

Confira 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 ao LocationShellCommand.java: Use estes comandos para adicionar testes provedores com que é possível especificar um local e o horário GNSS associado. O GnssTimeUpdateService detecta essas atualizações de local e periodicamente faz sugestões.

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ários externos

As sugestões de horários externos são outra maneira de fazer sugestões automáticas de horários para Android Essas novas opções permitem que você forneça sugestões de horário totalmente personalizadas para o Android, que podem se originar de várias ECUs que, por sua vez, podem usar uma combinação de relógios em tempo real, GNSS, NITZ ou qualquer outra fonte de horário.

As sugestões abaixo estão disponíveis no Android 12 para serem consideradas como external. sugestões de horários:

  • Propriedades VHAL. Um novo Propriedade VHAL chamado EPOCH_TIME é fornecido. Essa propriedade indica o número de milissegundos decorridos desde 01/01/1970 UTC. Seu valor pode ser passado ao Android TimeManager para sugerir um novo horário do sistema. Um exemplo de VHAL implementação que atualiza essa propriedade é fornecida no implementação de referência a seguir.
  • APIs do sistema. Um novo método com o nome suggestExternalTime() está disponível no TimeManager para dar ao sistema uma sugestão de horário externo. Se o sistema estiver configurado para considerar sugestões de horários externos (usando o config_autoTimeSourcesPriorityno arquivo de configuração), o carimbo de data/hora transmitido nesse método é usado para definir o horário do sistema, se não houver valores sugestões de horário prioritário disponíveis.

Você pode implementar uma solução de tempo externa, conforme descrito abaixo:

  1. Atualizar o arquivo de configuração de recurso (core/res/res/values/config.xml) e adicione o valor external a config_autoTimeSourcesPriority:
    <string-array name="config_autoTimeSourcesPriority>
            <item>external</item>
            <item>gnss</item>
    </string-array>

    Isso instrui o Android a dar a mais alta prioridade a sugestões de horário externo ao configurar o relógio do sistema. O hardware do veículo grava uma sugestão de carimbo de data/hora no novo EPOCH_TIME Propriedade VHAL.

  2. Um app do 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.