Otomatik saat algılama

Otomatik zaman algılama, çeşitli kaynaklardan zaman önerileri alır ve en iyi seçeneğe gidip Android'de sistem saatini buna göre ayarlar. Önceki Android sürümleri sağlandı iki farklı tarih ve saat ayarlama yöntemi vardır: kullanıcı başına manuel olarak veya otomatik saat algılama aşağıdakilerden birini yapabilirsiniz:

  • telephony, ağ kimliği ve saat dilimi (NITZ) telefon sinyallerini kullanır.
  • network, Ağ Saat Protokolü (NTP) zaman sunucularını kullanır.

Her seçenek için Android'de her zaman bulunmayan harici ağ bağlantıları gerekir Otomotiv. Örneğin, bazı ülkelerdeki bazı arabalarda yerleşik telefon özelliği olmayabilir. Dolayısıyla, Küresel Uydu Navigasyon Sistemleri (GNSS) saati, sistem kaynağı olarak sağlanır. ağ bağlantısı olmadığında kullanabilirsiniz.

Yakında kullanıma sunulacak bu Android sürümünde saati otomatik olarak algılamak ve ayarlamak için iki seçenek daha sunulur:

  • gnss, Küresel Uydu'yu kullanır Navigasyon Sistemleri (GNSS).
  • external kullanımları VHAL mülkü veya System API.

Otomatik zaman algılamayı etkinleştir

Otomatik zaman algılama özelliğini etkinleştirmek için Ayarlar > Tarih ve Zaman > Otomatik Tarih ve Saat:

Şekil 1. Otomatik Tarih ve Saat

Zaman kaynaklarını yapılandırma

Otomatik zaman algılamaya dahil edilecek zaman kaynaklarını ve önceliği belirtmek için bu zaman kaynaklarının dikkate alınması gerektiğinde cihazın kaynak ayarlarında değişiklik yapmanız gerekir. yapılandırma dosyası, 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>

Bu örnekte telephony ve network, otomatik saat algılama ve telephony zaman önerisine öncelik verilir network zaman önerisinden önce.

Genel anlamda, daha yüksek öncelikli kaynaktan gelen öneriler veya öneri çok eski olabilir. Ayrıca, en yüksek önceliğe sahip geçerli öneri cihazın geçerli sistem saatini birkaç saniyeyle eşleştirir (varsayılan değer) iki (2) saniye olursa süre değişmez.

Daha düşük zaman sınırı

Android 12, aşağıdaki durumlarda kullanılacak yeni bir daha düşük zaman sınırı sunar: zaman önerilerini doğrulayabilirsiniz. Bu özellikten önce otomatik saat algılama, önerilen gelen UTC saati. Bu özellikte, alt sınırdan önce geçen süreler silindi.

Alt sınır değeri, derleme zaman damgasından türetilen bir tarihten belirlenir. Şunlarda çalışır: ilkesini uygulayın: geçerli bir zaman, sistem görüntüsü oluşturulmadan önce gerçekleşemez. Android şunu yapmaz: üst sınırı zorunlu kılıyor.

GNSS zaman önerileri

gnss zaman kaynağı, Android 12'de yenidir ve GPS sinyalleri tarafından sağlanır. Bu telephony ve network kullanılamadığında zaman için güvenilir bir kaynaktır. Bu seçenek, yeni GnssTimeUpdateService özelliğine eklenmiştir. Konum güncellemelerini pasif olarak dinleyen SystemServer. Geçerli bir konum alındığında GnssTimeUpdateService, TimeDetectorService için bir öneride bulunuyor. Bu öneri: ardından sistem saatinin güncellenip güncellenmeyeceğini belirler.

Varsayılan olarak gnss zaman kaynağı AOSP'de etkin değildir ve bu nedenle iş ortakları tarafından etkinleştirilmelidir:

<!-- 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>

Bu özelliği etkinleştirmek için:

  1. config_enableGnssTimeUpdateService adlı cihazı güncelleyin. Değeri config_enableGnssTimeUpdateService, true olarak ayarlanmalıdır.
  2. config_autoTimeSourcesPriority adlı cihazı güncelleyin. gnss, config_autoTimeSourcesPriority için öğe listesi. gnss cihazının konumu listesi, değerlere göre GNSS önerilerine verilen önceliği belirler diğer kaynaklardan alınmış.

Güç üzerindeki etkisi

GnssTimeUpdateService, konum güncellemelerini pasif olarak dinler. Bu da, GPS'i hiçbir zaman aktif olarak açmaz. Sonuç olarak, Etkinleştirilmiş GNSS kaynağı göz ardı edilebilir düzeyde. Bu, sözleşmedeki başka bir uygulama veya hizmet sistem etkin olarak konum güncellemeleri isteğinde bulunur, GnssTimeUpdateService konum bilgisi almaz güncelleme ve GNSS zamanı önerme.

Test

Uyumluluk test paketi (CTS)

GNSS tarafından sağlanan bir zamanın mevcut olduğunu doğrulamak için bir CTS testi yapılır. Ayrıntılar için bkz. LocationShellCommand.java

Birim testleri

Aşağıdaki dosyada temel birim testlerine bakın:

atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java

Manuel testler

Bu özelliği test etmek için LocationShellCommand.java Test eklemek için bu komutları kullanın: konum ve ilişkili GNSS süresini belirtebileceğiniz sağlayıcılardır. GnssTimeUpdateService, bu konum güncellemelerini dinler ve düzenli aralıklarla önerilerde bulunur.

Not: Bu komutların arayüzü, sürümler arasında farklılık gösterebilir.

# 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>

Harici saat önerileri

Harici zaman önerileri, kullanıcılara otomatik zaman önerileri sağlamanın bir başka yoludur. Android Bu yeni seçenekler, Android, kullanıcı arayüzü ve uygulama gibi Bu kaynak, gerçek zamanlı saat, çeşitli ECU'lar ve ECU'lar gibi farklı kaynakların GNSS, NITZ veya başka bir zaman kaynağı.

Aşağıdaki öneriler Android 12'de external olarak değerlendirilebilir zaman önerileri:

  • VHAL özellikleri. Yeni bir VHAL özelliği EPOCH_TIME sağlanmış. Bu özellik, öğenin 1/1/1970 UTC itibarıyla geçen milisaniye sayısı. Bu değer, Yeni bir sistem saati önermek için Android TimeManager. VHAL örneği Google Analytics 360'ta sağlanan, referans uygulama bölümüne göz atın.
  • Sistem API'leri. suggestExternalTime() adlı yeni bir yöntem Zaman Yöneticisi'nde, sisteme harici bir zaman önerisi sağlamak için kullanılabilir. Sistem, harici zaman önerilerini dikkate alacak şekilde yapılandırıldıysa ( config_autoTimeSourcesPriority), zaman damgası bu yönteme aktarılan değer sistem saatini ayarlamak için kullanılır; eğer daha yüksek değer yoksa öncelikli zaman önerileri mevcut.

Aşağıda açıklandığı şekilde, harici bir zaman çözümü uygulayabilirsiniz:

  1. Kaynak yapılandırma dosyasını (core/res/res/values/config.xml) güncelleyin ve ardından external değerini config_autoTimeSourcesPriority değerine ekleyin:
    <string-array name="config_autoTimeSourcesPriority>
            <item>external</item>
            <item>gnss</item>
    </string-array>

    Bu şekilde, Android'e bu ayarları ayarlarken harici zaman önerilerine en yüksek önceliği vermesi talimatını verin. sistem saatinizi düzenler. Aracın donanımı, yeni cihaza bir zaman damgası önerisi EPOCH_TIME. VHAL özelliği.

  2. Tedarikçi firma tarafından sağlanan bir uygulama bu mülkü okur ve çağrıyı TimeManager.suggestExternal() Android, sağlanan zaman damgasını kullanabilir. yeni sistem saat değeri olarak ayarlayacağım.