Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Prioridad de fuente de tiempo

El marco de Android utiliza varias fuentes de tiempo para la sincronización horaria. Esta página se centra en las fuentes de tiempo automáticas del Protocolo de tiempo de red (NTP) y de Identidad de red y zona horaria (NITZ). De forma predeterminada en Android 12 o superior, el marco prioriza NTP como fuente de tiempo sobre NITZ porque NTP es más preciso y confiable que NITZ. En situaciones en las que NTP no está disponible, el marco recurre a NITZ. Esta es una inversión de la prioridad predeterminada de versiones anteriores de la plataforma. De forma predeterminada en Android 11 y versiones anteriores, el marco prioriza NITZ sobre NTP.

Para más detalles sobre este cambio, consulte los siguientes parches AOSP: 1563678 , 1513323 .

Configuración de la prioridad de la fuente de tiempo

Para configurar la fuente que toma prioridad por defecto para una versión específica de Android, configurar el config_autoTimeSourcesPriority clave en frameworks/base/core/res/res/values/config.xml en tiempo de compilación. Las sugerencias de tiempo de la fuente de tiempo que está más arriba en la lista tienen prioridad sobre las fuentes que están más abajo en la lista.

Fuentes de tiempo Android que se pueden configurar se encuentran en TimeDetectorStrategy.java . Las siguientes fuentes están configuradas para su uso de forma predeterminada:

  • Telefonía (NITZ)
  • Red (NTP)

Pruebas

Para verificar que el dispositivo usa NITZ cuando NTP no está disponible (cuando los datos móviles y Wi-Fi están deshabilitados), haga lo siguiente:

  1. Asegúrese de que haya una SIM que funcione en el dispositivo bajo prueba
  2. Apague los datos móviles y el Wi-Fi
  3. Ponga el dispositivo en modo avión para asegurarse de que la radio celular esté apagada
  4. Desactivar la detección automática de tiempo
  5. Configure el reloj manualmente a un valor de tiempo incorrecto en el futuro
  6. Reiniciar el dispositivo
  7. Activar la detección automática de tiempo
  8. Saque el dispositivo del modo avión

Estos pasos activan un cambio en el reloj del sistema tan pronto como se recibe una señal NITZ. Para verificar cómo está configurada la hora del dispositivo, ejecute el siguiente comando:

adb shell dumpsys time_detector

Para verificar que el reloj del sistema usa NITZ, confirme lo siguiente en la salida del comando:

  • mEnvironment.isAutoTimeDetectionEnabled() es true .
  • mEnvironment.autoOriginPriorities() contiene una lista de fuentes de tiempo con fuentes superiores en la lista de toma precedencia sobre fuentes más bajo en la lista.
  • Las Time change log sección muestra que el reloj del sistema se ajusta con una sugerencia de telefonía.
  • La Telephony suggestion history sección contiene sugerencias de tiempo.
  • La Network suggestion history sección está vacía.

Las sugerencias de tiempo en la Telephony suggestion history y Network suggestion history secciones se consideran la fuente de la verdad para el tiempo. Si el dispositivo está conectado a Internet y tiene una tarjeta SIM, las sugerencias se generan utilizando tanto NTP (red) como NITZ (telefonía). En este caso de prueba, sólo la Telephony suggestion history sección contiene sugerencias porque NTP está desactivado.

El Time change log sección registra los cambios realizados en el reloj del sistema del dispositivo y la sugerencia de utilizar. El reloj del sistema se establece en base a la orden de las fuentes de tiempo en la lista de prioridades en el config_autoTimeSourcesPriority clave. Sin embargo, las sugerencias de una fuente de mayor prioridad pueden ignorarse si la sugerencia es demasiado antigua o no válida. Además, si la sugerencia válida de mayor prioridad coincide con la hora actual del reloj del sistema del dispositivo en un par de segundos, la hora no cambiará. En este caso de prueba, siempre que las sugerencias no son anticuadas, el reloj del sistema se ajusta con una de las sugerencias de la Telephony suggestion history .

El siguiente es un ejemplo de una salida en la que el dispositivo recurre al uso de NITZ cuando NTP no está disponible.

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}

Como referencia como una comparación con la salida en el escenario de prueba, el siguiente es un ejemplo de una salida típica en la que el dispositivo recibe sugerencias de tiempo de fuentes de tiempo NTP y 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}