O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Prioridade da fonte de tempo

A estrutura do Android usa várias fontes de tempo para sincronização de tempo. Esta página se concentra nas fontes de tempo automáticas do Network Time Protocol (NTP) e da Network Identity and Time Zone (NITZ). Por padrão no Android 12 ou superior, a estrutura prioriza o NTP como a fonte de tempo sobre o NITZ porque o NTP é mais preciso e confiável do que o NITZ. Em situações em que o NTP não está disponível, a estrutura recorre ao NITZ. Esta é uma reversão da prioridade padrão das versões anteriores da plataforma. Por padrão, no Android 11 e inferior, a estrutura prioriza NITZ em vez de NTP.

Para mais detalhes sobre esta alteração, consulte as seguintes correções AOSP: 1563678 , 1513323 .

Configurando a prioridade da fonte de tempo

Para configurar quais fonte de tempo tem prioridade por defeito para uma específica versão Android, configure o config_autoTimeSourcesPriority chave na frameworks/base/core/res/res/values/config.xml em tempo de compilação. As sugestões de tempo da fonte de tempo mais alta na lista têm precedência sobre as fontes mais baixas na lista.

Fontes de horário Android que podem ser configurados são encontrados em TimeDetectorStrategy.java . As seguintes fontes são configuradas para uso por padrão:

  • Telefonia (NITZ)
  • Rede (NTP)

Testando

Para verificar se o dispositivo usa NITZ quando o NTP não está disponível (quando os dados móveis e o Wi-Fi estão desativados), faça o seguinte:

  1. Certifique-se de que há um SIM funcionando no DUT
  2. Desligue os dados móveis e o Wi-Fi
  3. Coloque o dispositivo em modo avião para garantir que o rádio celular esteja desligado
  4. Desligue a detecção automática de tempo
  5. Ajuste o relógio manualmente para um valor de hora incorreto no futuro
  6. Reinicialize o dispositivo
  7. Ativar detecção automática de hora
  8. Retire o dispositivo do modo avião

Essas etapas acionam uma alteração no relógio do sistema assim que um sinal NITZ é recebido. Para verificar como a hora do dispositivo está definida, execute o seguinte comando:

adb shell dumpsys time_detector

Para verificar se o relógio do sistema usa NITZ, confirme o seguinte na saída do comando:

  • mEnvironment.isAutoTimeDetectionEnabled() é true .
  • mEnvironment.autoOriginPriorities() contém uma lista de fontes de tempo com as fontes mais elevados na lista tendo precedência sobre fontes mais baixo na lista.
  • Os Time change log seção mostra que o relógio do sistema está definido utilizando uma sugestão de telefonia.
  • A Telephony suggestion history seção contém sugestões de tempo.
  • A Network suggestion history seção está vazia.

As sugestões de tempo na Telephony suggestion history e Network suggestion history seções são considerados a fonte da verdade para o tempo. Se o dispositivo estiver conectado à internet e tiver um cartão SIM, as sugestões são geradas usando NTP (rede) e NITZ (telefonia). Neste caso de teste, somente a Telephony suggestion history seção contém sugestões porque NTP está desativado.

O Time change log seção registra as alterações feitas relógio do sistema do dispositivo e a sugestão usado. O relógio do sistema é definido com base na ordem das fontes de tempo na lista de prioridade na config_autoTimeSourcesPriority chave. No entanto, sugestões de uma fonte de prioridade mais alta podem ser ignoradas se a sugestão for muito antiga ou inválida. Além disso, se a sugestão válida de maior prioridade corresponder à hora atual do relógio do sistema do dispositivo em alguns segundos, a hora não será alterada. Neste caso de teste, desde que as sugestões não são desatualizados, o relógio do sistema é definido utilizando uma das sugestões da Telephony suggestion history .

A seguir está um exemplo de uma saída em que o dispositivo volta a usar NITZ quando NTP não está disponível.

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=73059
  mEnvironment.systemClockMillis()=1614186767818
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-02-24T15:44:15Z(1614181455000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    66261 / 2021-02-24T17:12:41.020Z - Set system clock using time=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000} cause=Found good telephony suggestion., bestTelephonySuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}, detectionReason=New telephony time suggested. timeSuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]} elapsedRealtimeMillis=66259 newSystemClockMillis=1614186761019
  Telephony suggestion history:
    key idx: 0=0
    val idx: 0=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      Historic values=[
        0@PT1M6.258S: TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      ]
  Network suggestion history:
    {Empty}
  Gnss suggestion history:
    {Empty}
  External suggestion history:
    {Empty}

Para referência como uma comparação com a saída no cenário de teste, a seguir está um exemplo de uma saída típica em que o dispositivo recebe sugestões de tempo de fontes de tempo NTP e NITZ.

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=302926
  mEnvironment.systemClockMillis()=1614186997685
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-02-24T15:44:15Z(1614181455000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    66261 / 2021-02-24T17:12:41.020Z - Set system clock using time=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000} cause=Found good telephony suggestion., bestTelephonySuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}, detectionReason=New telephony time suggested. timeSuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]} elapsedRealtimeMillis=66259 newSystemClockMillis=1614186761019
  Telephony suggestion history:
    key idx: 0=0
    val idx: 0=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      Historic values=[
        0@PT1M6.258S: TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      ]
  Network suggestion history:
    0@PT4M4.04S: NetworkTimeSuggestion{mUtcTime=TimestampedValue{mReferenceTimeMillis=244038, mValue=1614186939242}, mDebugInfo=[Origin: NetworkTimeUpdateService. event=3]}
  Gnss suggestion history:
    {Empty}
  External suggestion history:
    {Empty}