Le framework Android utilise différentes sources de temps pour la synchronisation de l'heure. Cette page se concentre sur le protocole NTP (Network Time Protocol) et Sources de temps automatiques de l'identité du réseau et du fuseau horaire (NITZ, Network Identity and Time Zone). Par défaut, sous Android 12 ou version ultérieure, le framework donne la priorité NTP comme source temporelle par rapport à NITZ, car NTP est plus précis et plus fiable que NITZ. Dans les cas où NTP n'est pas disponible, le framework fait appel à NITZ. Cette opération inverse la priorité par défaut des versions antérieures du Google Cloud. Par défaut, sous Android 11 et versions antérieures, le framework donne la priorité à NITZ via NTP.
Pour en savoir plus sur ce changement, consultez les correctifs AOSP suivants: 1563678, 1513323
Configurer la priorité des sources temporelles
Pour configurer la source temporelle prioritaire par défaut pour un appareil Android spécifique
vous devez configurer
config_autoTimeSourcesPriority
dans frameworks/base/core/res/res/values/config.xml
au moment de la compilation. Heure
les suggestions de la source temporelle qui figure plus haut dans la liste sont prioritaires
par rapport aux sources
situées plus bas dans la liste.
Les sources de temps Android pouvant être configurées se trouvent dans
TimeDetectorStrategy.java
Les sources suivantes sont configurées pour être utilisées par défaut:
- Téléphonie (NITZ)
- Réseau (NTP)
Tests
Vérifier que l'appareil utilise le NITZ lorsque NTP n'est pas disponible (lorsque les données mobiles et le Wi-Fi sont désactivés), procédez comme suit:
- Vérifiez que l'appareil photo dispose d'une carte SIM opérationnelle
- Désactiver les données mobiles et le Wi-Fi
- Mettez l'appareil en mode Avion pour vous assurer que la cellule GSM est désactivée.
- Désactiver la détection automatique de l'heure
- Régler l'horloge manuellement sur une valeur future incorrecte
- Redémarrer l'appareil
- Activer la détection automatique de l'heure
- Quitter le mode Avion sur l'appareil
Ces étapes déclenchent une modification de l'horloge système dès qu'un NITZ le signal reçu. Pour vérifier comment l'heure de l'appareil est réglée, exécutez la commande suivante :
adb shell dumpsys time_detector
Pour vérifier que l'horloge système utilise le NITZ, vérifiez les points suivants dans la commande sortie:
mEnvironment.isAutoTimeDetectionEnabled()
-true
.mEnvironment.autoOriginPriorities()
contient une liste de sources de temps les sources qui figurent en haut de la liste prévalent sur celles situées plus bas. liste.- La section
Time change log
indique que l'horloge système est définie à l'aide d'un les suggestions d'appels téléphoniques. - La section
Telephony suggestion history
contient des suggestions d'horaires. - La section
Network suggestion history
est vide.
Les suggestions d'horaires dans les Telephony suggestion history
et
Les sections Network suggestion history
sont considérées comme la source de référence pour
en temps réel. Si l'appareil est connecté à Internet et qu'il est équipé d'une carte SIM, les suggestions
sont générés à l'aide du réseau NTP (réseau) et du NITZ (téléphonie). Dans ce scénario de test,
seule la section Telephony suggestion history
contient des suggestions, car
NTP est désactivé.
La section Time change log
enregistre les modifications apportées aux paramètres
l'horloge système et la suggestion utilisée. L'horloge système est définie en fonction
l'ordre des sources de temps dans la liste des priorités
la clé config_autoTimeSourcesPriority
. Cependant, les suggestions d'un
La source ayant une priorité plus élevée peut être ignorée si la suggestion est trop ancienne ou non valide.
De plus, si la suggestion valide ayant la priorité la plus élevée correspond à l'état actuel
l'heure de l'horloge système à quelques
secondes, l'heure ne sera pas modifiée.
Dans ce scénario de test, tant que les suggestions ne sont pas obsolètes, l'horloge système
est défini à l'aide de l'une des suggestions de Telephony suggestion history
.
Voici un exemple de sortie où l'appareil utilise NITZ lorsque NTP n'est pas 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}
À des fins de comparaison avec les résultats du scénario de test, le Voici un exemple de sortie type dans laquelle le périphérique reçoit des suggestions d'heure provenant des sources temporelles NTP et 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}