Otomatik zaman algılama

Otomatik zaman algılama, çeşitli kaynaklardan zaman önerileri alır, en iyi seçeneği belirler ve ardından Android'deki sistem saatini buna göre ayarlar. Önceki Android sürümlerinde tarih ve saati ayarlamak için iki yöntem sunuluyordu: kullanıcı başına manuel olarak ayarlama veya otomatik zaman algılama. Bu yöntemlerden biriyle ayarlama yapılıyordu:

  • telephony, Ağ Kimliği ve Saat Dilimi (NITZ) telefon sinyallerini kullanır.
  • network, Ağ Saati Protokolü (NTP) zaman sunucularını kullanır.

Her seçenek için harici ağlara bağlantı gerekir. Bu bağlantılar Android Automotive'de her zaman kullanılamayabilir. Örneğin, bazı ülkelerde bazı arabalarda yerleşik telefon özelliği olmayabilir. Bu nedenle, ağ bağlantısı olmadığında kullanabileceğiniz sistem saati kaynağı olarak Küresel Uydu Navigasyon Sistemleri (GNSS) saati sağlanır.

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

  • gnss, Küresel Uydu Navigasyon Sistemleri'ni (GNSS) kullanır.
  • external, VHAL özelliğini veya System API'yi kullanır.

Otomatik zaman algılamayı etkinleştirme

Otomatik zaman algılamayı etkinleştirmek için Ayarlar > Tarih ve Saat > Otomatik Tarih ve Saat'i seçtiğinizden emin olun:

Şekil 1. Otomatik Tarih ve Saat'i seçin.

Zaman kaynaklarını yapılandırma

Otomatik zaman algılamaya hangi zaman kaynaklarının dahil edileceğini ve bu zaman kaynaklarının hangi öncelikte dikkate alınacağını belirtmek için cihazın kaynak yapılandırma dosyasını (core/res/res/values/config.xml) değiştirmeniz gerekir:

<!-- 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ılamada dikkate alınır ve telephony saat önerilerine network saat önerilerinden daha fazla öncelik verilir.

Genel olarak, öneri geçersizse veya çok eskiyse daha yüksek öncelikli bir kaynaktan gelen öneriler yoksayılır. Ayrıca, en yüksek öncelikli geçerli öneri, cihazın mevcut sistem saatiyle birkaç saniye içinde eşleşirse (varsayılan değer iki (2) saniyedir) saat değiştirilmez.

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

Android 12, zaman önerilerini doğrularken kullanabileceğiniz yeni bir daha düşük zaman sınırı sunar. Bu özellikten önce, otomatik saat algılama, önerilen gelen UTC saatini doğrulamıyordu. Bu özellik sayesinde, alt sınırdan önce geçen süreler atılır.

Alt sınır değeri, derleme zaman damgasından elde edilen bir tarihten belirlenir. Bu, geçerli bir zamanın sistem görüntüsü oluşturulmadan önce gerçekleşemeyeceği ilkesine dayanır. Android, üst sınır uygulamamaktadır.

GNSS zaman önerileri

gnss Zaman kaynağı, Android 12'de yeni bir özelliktir ve GPS sinyalleriyle sağlanır. Bu, telephony ve network kullanılamadığında saat için güvenilir bir kaynaktır. Bu seçenek, konum güncellemelerini pasif olarak dinleyen SystemServer'daki yeni GnssTimeUpdateService öğesine eklenir. Geçerli bir konum alındığında GnssTimeUpdateService, TimeDetectorService için bir öneride bulunur. TimeDetectorService ise sistem saatinin güncellenip güncellenmeyeceğini belirler.

gnss zaman kaynağı, AOSP'de varsayılan olarak etkinleştirilmediğinden 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. config_enableGnssTimeUpdateService değeri true olarak ayarlanmalıdır.
  2. config_autoTimeSourcesPriority adlı cihazı güncelleyin. gnss, config_autoTimeSourcesPriority için öğe listesine eklenmelidir. Öncelik listesindeki gnss konumu, diğer kaynaklardaki değerlere göre GNSS önerilerine verilen önceliği belirler.

Güç üzerindeki etkisi

GnssTimeUpdateService, konum güncellemelerini pasif olarak dinler. Bu nedenle, ek güç tüketmek için GPS'i hiçbir zaman etkin olarak açmaz. Bu nedenle, GNSS kaynağı etkinleştirildiğinde tüketilen güç ihmal edilebilir düzeydedir. Bu durum, sistemdeki başka bir uygulama veya hizmet konum güncellemelerini etkin olarak istemediği sürece GnssTimeUpdateService'nın konum güncellemesi almayacağı ve GNSS zamanı önermeyeceği anlamına da gelir.

Test

Uyumluluk Test Paketi (CTS)

GNSS tarafından sağlanan zamanın kullanılabilir olduğunu doğrulamak için bir CTS testi sağlanır. Ayrıntılı bilgi için LocationShellCommand.java başlıklı makaleyi inceleyin.

Birim testleri

Temel birim testlerini aşağıdaki dosyada görebilirsiniz:

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

Manuel testler

Bu özelliği test etmek için LocationShellCommand.java'ya yeni komutlar eklendi. Konum ve ilişkili GNSS zamanını belirtebileceğiniz test sağlayıcıları eklemek için bu komutları kullanın. GnssTimeUpdateService bu konum güncellemelerini dinler ve düzenli olarak önerilerde bulunur.

Not: Bu komutların arayüzü, sürümler arasında değişebilir.

# 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 zaman önerileri

Harici zaman önerileri, Android'e otomatik zaman önerileri sunmanın başka bir yoludur. Bu yeni seçenek, Android'e tamamen özelleştirilmiş zaman önerileri sunmanıza olanak tanır. Bu öneriler, çeşitli ECU'lardan kaynaklanabilir. ECU'lar da gerçek zamanlı saat, GNSS, NITZ veya başka bir zaman kaynağının kombinasyonunu kullanabilir.

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

  • VHAL özellikleri. EPOCH_TIME adlı yeni bir VHAL özelliği sağlanır. Bu özellik, 1/1/1970 UTC tarihinden bu yana geçen milisaniye sayısını gösterir. Değeri, yeni bir sistem saati önermek için Android'e TimeManager iletilebilir. Bu özelliği güncelleyen örnek bir VHAL uygulaması, referans uygulama sayfasında sağlanmıştır.
  • Sistem API'leri. Sisteme harici bir zaman önerisi sunmak için TimeManager'da suggestExternalTime() adlı yeni bir yöntem kullanılabilir. Sistem, yapılandırma dosyasında config_autoTimeSourcesPriority kullanılarak harici zaman önerilerini dikkate alacak şekilde yapılandırılmışsa bu yönteme iletilen zaman damgası, daha yüksek öncelikli zaman önerileri yoksa sistem zamanını ayarlamak için kullanılır.

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'ye ekleyin:
    <string-array name="config_autoTimeSourcesPriority>
            <item>external</item>
            <item>gnss</item>
    </string-array>

    Bu işlem, sistem saatini ayarlarken Android'e harici saat önerilerine en yüksek önceliği vermesi talimatını gönderir. Araçtaki donanım, yeni EPOCH_TIME VHAL özelliğine zaman damgası önerisi yazar.

  2. Bir tedarikçi tarafından sağlanan uygulama bu özelliği okur ve TimeManager.suggestExternal()'ı çağırır. Android daha sonra sağlanan zaman damgasını yeni sistem saati değeri olarak kullanabilir.