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 uyacak şekilde ayarlar. Önceki Android sürümleri, tarih ve saati ayarlamak için kullanıcı başına manuel olarak veya otomatik zaman algılamayla ve aşağıdaki seçeneklerden biriyle ayarlanarak iki yol sağlıyordu:
-
telephony
, Ağ Kimliği ve Saat Dilimi (NITZ) telefon sinyallerini kullanır. -
network
Ağ Zaman Protokolü (NTP) zaman sunucularını kullanır.
Her seçenek, Android Automotive'de her zaman bulunmayan harici ağlara bağlantı gerektirir. Örneğin, bazı ülkelerde bazı arabalarda yerleşik telefon bulunmayabilir. Bu nedenle, Global Uydu Navigasyon Sistemleri (GNSS) zamanı, ağ bağlantısı olmadığında kullanmanız için sistem zamanı kaynağı olarak sağlanır.
Yaklaşan bu Android sürümü, zamanı otomatik olarak algılamak ve ayarlamak için iki seçenek daha sunuyor:
-
gnss
Küresel Uydu Navigasyon Sistemlerini (GNSS) kullanır. -
external
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ırma
Otomatik zaman tespitine 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 tespitinde telephony
ve network
dikkate alınır ve telephony
süresi önerileri, network
zamanı önerilerinden önce önceliklendirilir.
Genel olarak konuşursak, daha yüksek öncelikli bir kaynaktan gelen öneriler, öneri geçersizse veya öneri çok eskiyse dikkate alınmaz. Ayrıca, en yüksek öncelikli geçerli öneri, cihazın mevcut sistem saati zamanıyla birkaç saniye içinde eşleşirse (varsayılan değer iki (2) saniyedir), zaman değişmeyecektir.
Daha düşük zaman sınırı
Android 12, zaman önerilerini doğrularken kullanılacak yeni bir alt süre sınırı sağlar. Bu özellikten önce, otomatik saat algılama, önerilen gelen UTC saatini doğrulamazdı. 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 türetilen bir tarihe göre belirlenir. Bu, sistem görüntüsü oluşturulmadan önce geçerli bir zamanın oluşamayacağı prensibiyle ç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, telephony
ve network
mevcut olmadığı zamanlar için güvenilir bir kaynaktır. Bu seçenek, konum güncellemelerini pasif olarak dinleyen SystemServer'daki yeni GnssTimeUpdateService
eklenir. Geçerli bir konum alındığında, GnssTimeUpdateService
TimeDetectorService
bir öneride bulunur ve bu daha sonra sistem saatinin güncellenmesi gerekip gerekmediğini belirler.
Varsayılan olarak, gnss
zaman kaynağı AOSP'de etkin değildir ve bu nedenle ortaklar tarafından etkinleştirilmesi 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> <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:
-
config_enableGnssTimeUpdateService
güncelleyin.config_enableGnssTimeUpdateService
değeritrue
olarak ayarlanmalıdır. -
config_autoTimeSourcesPriority
güncelleyin.config_autoTimeSourcesPriority
için öğe listesinegnss
eklenmelidir.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 bir şekilde dinler; bu, 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 hizmetin aktif olarak konum güncellemesi talep etmemesi durumunda GnssTimeUpdateService
konum güncellemesi almayacağı ve bir GNSS zamanı önermeyeceği anlamına da gelir.
Test yapmak
Uyumluluk test paketi (CTS)
GNSS tarafından sağlanan zamanın mevcut olduğunu doğrulamak için bir CTS testi sağlanır. Ayrıntılar için bkz. LocationShellCommand.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
dosyasına yeni komutlar eklendi. Bir konumu ve ilgili GNSS zamanını belirtebileceğiniz test sağlayıcılarını 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 zaman önerileri
Harici zaman önerileri, Android'e otomatik zaman önerileri sağlamanın başka bir yoludur. Bu yeni seçenekler, Android'e, gerçek zamanlı saat, GNSS, NITZ veya başka herhangi bir zaman kaynağının birleşimini kullanabilen çeşitli ECU'lardan gelebilen tamamen özelleştirilmiş zaman önerileri sunmanıza olanak tanır.
Aşağıdaki öneriler 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. Yeni bir sistem saati önermek için değeri AndroidTimeManager
aktarılabilir. Bu özelliği güncelleyen örnek bir VHAL uygulaması aşağıdaki referans uygulamasında verilmiştir. - Sistem API'leri. Sisteme harici bir zaman önerisi sağlamak için TimeManager'da
suggestExternalTime()
adı verilen yeni bir yöntem mevcuttur. Sistem harici zaman önerilerini dikkate alacak şekilde yapılandırılmışsa (yapılandırma dosyasındaconfig_autoTimeSourcesPriority
kullanılarak), daha yüksek öncelikli zaman önerileri yoksa , bu yönteme iletilen zaman damgası sistem saatini ayarlamak için kullanılır.
Aşağıda açıklandığı şekilde bir harici zaman çözümü uygulayabilirsiniz:
- Kaynak yapılandırma dosyasını (
core/res/res/values/config.xml
) güncelleyin ve ardındanconfig_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 vermesi talimatını verir. Araçtaki donanım, yeni
EPOCH_TIME
VHAL özelliğine bir zaman damgası önerisi yazar. - Satıcı tarafından sağlanan bir uygulama bu özelliği okur ve
TimeManager.suggestExternal()
öğesini çağırır. Android daha sonra sağlanan zaman damgasını yeni sistem saati değeri olarak kullanabilir.