Otomatik Zaman Algılama

Otomatik zaman algılama , çeşitli kaynaklardan zaman önerileri alır, en iyi seçeneği seçer ve ardından Android'deki sistem saatini buna göre ayarlar. Önceki Android sürümleri, tarih ve saati ayarlamak için iki yol sağladı - kullanıcı başına manuel olarak ayarlandı veya şu iki seçenekten biri tarafından ayarlanan otomatik zaman algılama ile:

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

Her seçenek, Android Automotive'de her zaman mevcut olmayan harici ağlara bağlantı gerektirir. Örneğin, bazı ülkelerde bazı arabalarda dahili telefon bulunmayabilir. Bu nedenle, Global Uydu Navigasyon Sistemleri (GNSS) saati artık ağ bağlantısı olmadığında kullanmanız için bir sistem saati kaynağı olarak da sağlanmaktadır.

Yaklaşan bu Android sürümü, zamanı otomatik olarak algılamak ve ayarlamak için iki seçenek daha sunar:

  • gnss , Global Uydu Navigasyon Sistemlerini (GNSS) kullanır.
  • harici , bir VHAL özelliğini veya Sistem API'sini kullanır.

Otomatik zaman algılamayı etkinleştir

Otomatik saat 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 Saati Seçin

Zaman kaynaklarını yapılandırın

Otomatik zaman algılamaya hangi zaman kaynaklarının dahil edileceğini ve bu zaman kaynaklarının dikkate alınması gereken önceliği 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, otomatik zaman algılamada telephony ve network ele alınır ve telephony zaman önerilerine network zaman önerilerinden önce öncelik verilir.

Genel olarak konuşursak, öneri geçersizse veya öneri çok eskiyse, daha yüksek öncelikli bir kaynaktan gelen öneriler yok sayı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), zaman değişmez.

Alt zaman sınırı

Android 12, zaman önerilerini doğrularken kullanılacak yeni bir daha düşük zaman sağlar. Bu özellikten önce, otomatik zaman algılama, önerilen gelen UTC zamanını doğrulamazdı. Bu özellik ile alt sınıra kadar geçen süreler atılır.

Alt sınır değeri, derleme zaman damgasından türetilen bir tarihten belirlenir. Bu, sistem görüntüsü oluşturulmadan önce geçerli bir zamanın oluşamayacağı ilkesiyle çalışır. Android bir üst sınır uygulamaz.

GNSS zaman önerileri

gnss zaman kaynağı Android 12'de yenidir ve GPS sinyalleriyle sağlanır. Bu, telefon ve ağın mevcut olmadığı zamanlar için güvenilir bir kaynak olarak kabul edilir. Bu seçenek, konum güncellemelerini pasif olarak dinleyen SystemServer'daki yeni GnssTimeUpdateService eklenir. Geçerli bir konum alındığında, GnssTimeUpdateService TimeDetectorService öneride bulunur ve bu daha sonra sistem saatinin güncellenmesi gerekip gerekmediğini belirler.

Varsayılan olarak, gnss zaman kaynağı gnss etkinleştirilmemiştir 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'i güncelleyin. config_enableGnssTimeUpdateService değeri true olarak ayarlanmalıdır.
  2. config_autoTimeSourcesPriority güncelleyin. gnss için öğe listesine config_autoTimeSourcesPriority . gnss öncelik listesindeki konumu, diğer kaynaklardan gelen değerlere göre GNSS önerilerine verilen önceliği belirler.

Güç üzerindeki etkisi

GnssTimeUpdateService konum güncellemelerini pasif olarak dinler, bu da ek güç tüketmek için GPS'i hiçbir zaman aktif olarak açmadığı anlamına gelir. Sonuç olarak, GNSS kaynağı etkinleştirildiğinde tüketilen güç ihmal edilebilir düzeydedir. Bu aynı zamanda, sistemdeki başka bir uygulama veya hizmet aktif olarak konum güncellemelerini talep etmedikçe, GnssTimeUpdateService bir konum güncellemesi almaması ve bir GNSS zamanı önermesi anlamına gelir.

Test yapmak

Uyumluluk testi paketi (CTS)

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

Birim testleri

Aşağıdaki dosyadaki 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 yeni komutlar eklendi. Bir konum ve ilişkili GNSS zamanı belirtebileceğiniz test sağlayıcıları eklemek için bu komutları kullanın. GnssTimeUpdateService bu konum güncellemelerini dinler ve periyodik 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 saat önerileri

Harici zaman önerileri, Android'e otomatik zaman önerileri sağlamanın başka bir yoludur. Bu yeni seçenekler, çeşitli ECU'lardan kaynaklanabilen ve sırayla gerçek zamanlı saat, GNSS, NITZ veya başka herhangi bir zaman kaynağının bir kombinasyonunu kullanabilen Android'e tamamen özelleştirilmiş zaman önerileri sağlamanıza olanak tanır.

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

  • VHAL özellikleri. EPOCH_TIME adlı yeni bir VHAL özelliği sağlandı. Bu özellik, 1/1/1970 UTC'den bu yana geçen milisaniye sayısını belirtir. Değeri, yeni bir sistem saati önermek için Android TimeManager . Bu özelliği güncelleyen örnek bir VHAL uygulaması, aşağıdaki başvuru uygulamasında sağlanmıştır.
  • Sistem API'leri. Sisteme harici bir zaman önerisi sağlamak için artık suggestExternalTime() adlı yeni bir yöntem mevcuttur. Sistem harici zaman önerilerini dikkate alacak şekilde yapılandırılmışsa (yapılandırma dosyasında config_autoTimeSourcesPriority kullanılarak), daha yüksek öncelikli zaman önerileri yoksa sistem saatini ayarlamak için bu yönteme iletilen zaman damgası kullanılır.

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

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

    Bunu yapmak, Android'e sistem saatini ayarlarken harici zaman önerilerine en yüksek önceliği verme talimatı verir. Araçtaki donanım, yeni EPOCH_TIME VHAL özelliğine bir zaman damgası önerisi yazar.

  2. Satıcı tarafından sağlanan bir 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.