Deteksi Waktu Otomatis

Deteksi waktu otomatis menerima saran waktu dari berbagai sumber, memilih opsi terbaik, lalu menyetel jam sistem di Android agar sesuai. Rilis Android sebelumnya menyediakan dua cara untuk menyetel tanggal dan waktu — baik disetel secara manual per pengguna atau dengan deteksi waktu otomatis, disetel oleh salah satu dari dua opsi berikut:

  • telepon menggunakan sinyal telepon Network Identity and Time Zone (NITZ).
  • jaringan menggunakan server waktu Network Time Protocol (NTP).

Setiap opsi memerlukan koneksi ke jaringan eksternal, yang tidak selalu tersedia di Android Automotive. Misalnya, di beberapa negara, beberapa mobil mungkin tidak memiliki telepon bawaan. Oleh karena itu, waktu Sistem Navigasi Satelit Global (GNSS) kini juga tersedia sebagai sumber waktu sistem untuk Anda gunakan saat konektivitas jaringan tidak tersedia.

Rilis Android mendatang ini menyediakan dua opsi lagi untuk mendeteksi dan menyetel waktu secara otomatis:

  • gnss menggunakan Sistem Navigasi Satelit Global (GNSS).
  • eksternal menggunakan properti VHAL atau System API.

Aktifkan deteksi waktu otomatis

Untuk mengaktifkan deteksi waktu otomatis, pastikan untuk memilih Pengaturan > Tanggal & Waktu > Tanggal & Waktu Otomatis :

Gambar 1. Pilih Tanggal & Waktu Otomatis

Konfigurasikan sumber waktu

Untuk menentukan sumber waktu mana yang akan disertakan dalam deteksi waktu otomatis, dan prioritas sumber waktu ini harus dipertimbangkan, Anda harus mengubah file konfigurasi sumber daya perangkat, 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>

Dalam contoh ini, telephony dan network dipertimbangkan dalam deteksi waktu otomatis dan saran waktu telephony diprioritaskan sebelum saran waktu network .

Secara umum, saran dari sumber dengan prioritas lebih tinggi akan diabaikan jika saran tersebut tidak valid atau jika saran tersebut terlalu lama. Juga, jika saran valid dengan prioritas tertinggi cocok dengan waktu jam sistem perangkat saat ini dalam beberapa detik (nilai defaultnya adalah dua (2) detik), waktu tidak akan diubah.

Batas waktu yang lebih rendah

Android 12 menyediakan batas waktu baru yang lebih rendah untuk digunakan saat memvalidasi saran waktu. Sebelum fitur ini, deteksi waktu otomatis tidak akan memvalidasi waktu UTC masuk yang disarankan. Dengan fitur ini, waktu yang berlalu sebelum batas bawah akan dibuang.

Nilai batas bawah ditentukan dari tanggal yang berasal dari stempel waktu pembuatan. Ini bekerja berdasarkan prinsip bahwa waktu yang valid tidak dapat terjadi sebelum citra sistem dibangun. Android tidak memberlakukan batas atas.

Saran waktu GNSS

Sumber waktu gnss baru untuk Android 12 dan disediakan oleh sinyal GPS. Ini dianggap sebagai sumber yang dapat diandalkan untuk waktu ketika telepon dan jaringan tidak tersedia. Opsi ini ditambahkan ke GnssTimeUpdateService baru di SystemServer yang secara pasif mendengarkan pembaruan lokasi. Ketika lokasi yang valid diterima, GnssTimeUpdateService membuat saran ke TimeDetectorService , yang kemudian menentukan apakah jam sistem harus diperbarui.

Secara default, sumber waktu gnss tidak diaktifkan di AOSP dan, oleh karena itu, harus diaktifkan oleh mitra:

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

Untuk mengaktifkan fitur ini:

  1. Perbarui config_enableGnssTimeUpdateService. Nilai untuk config_enableGnssTimeUpdateService harus disetel ke true .
  2. Perbarui config_autoTimeSourcesPriority . gnss harus ditambahkan ke daftar item untuk config_autoTimeSourcesPriority . Posisi gnss dalam daftar prioritas menentukan prioritas yang diberikan untuk saran GNSS, sehubungan dengan nilai-nilai dari sumber lain.

Dampak pada kekuatan

GnssTimeUpdateService mendengarkan pembaruan lokasi secara pasif, yang berarti bahwa ia tidak pernah secara aktif menyalakan GPS untuk menggunakan daya tambahan. Akibatnya, daya yang dikonsumsi saat sumber GNSS diaktifkan dapat diabaikan. Ini juga berarti bahwa kecuali aplikasi atau layanan lain dalam sistem secara aktif meminta pembaruan lokasi, GnssTimeUpdateService tidak mendapatkan pembaruan lokasi dan menyarankan waktu GNSS.

Pengujian

Paket uji kompatibilitas (CTS)

Tes CTS disediakan untuk memverifikasi bahwa waktu yang disediakan GNSS tersedia. Untuk detailnya, lihat LocationManagerCoarseTest.java .

Tes unit

Lihat pengujian unit dasar dalam file berikut:

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

Tes manual

Untuk menguji fitur ini, perintah baru telah ditambahkan ke LocationShellCommand.java . Gunakan perintah ini untuk menambahkan penyedia pengujian yang dengannya Anda dapat menentukan lokasi dan waktu GNSS terkait. GnssTimeUpdateService mendengarkan pembaruan lokasi ini, dan secara berkala memberikan saran.

Catatan: Antarmuka untuk perintah ini dapat berubah di antara rilis.

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

Saran waktu eksternal

Saran waktu eksternal adalah cara lain untuk memberikan saran waktu otomatis ke Android. Opsi baru ini memungkinkan Anda memberikan saran waktu yang sepenuhnya disesuaikan untuk Android, yang dapat berasal dari berbagai ECU yang, pada gilirannya, dapat menggunakan kombinasi jam waktu nyata, GNSS, NITZ, atau sumber waktu lainnya.

Saran berikut sekarang tersedia di Android 12 untuk dipertimbangkan sebagai saran waktu external :

  • properti VHAL. Properti VHAL baru bernama EPOCH_TIME disediakan. Properti ini menunjukkan jumlah milidetik yang telah berlalu sejak 1/1/1970 UTC. Nilainya dapat diteruskan ke Android TimeManager untuk menyarankan waktu sistem baru. Contoh implementasi VHAL yang memperbarui properti ini disediakan dalam implementasi referensi di bawah ini.
  • API Sistem. Metode baru yang disebut suggestExternalTime() sekarang tersedia di TimeManager untuk menyediakan sistem dengan saran waktu eksternal. Jika sistem dikonfigurasi untuk mempertimbangkan saran waktu eksternal (menggunakan config_autoTimeSourcesPriority dalam file konfigurasi), stempel waktu yang diteruskan ke metode ini digunakan untuk menyetel waktu sistem, jika tidak ada saran waktu dengan prioritas lebih tinggi yang tersedia.

Anda dapat menerapkan solusi waktu eksternal seperti yang dijelaskan di bawah ini:

  1. Perbarui file konfigurasi sumber daya ( core/res/res/values/config.xml ) lalu tambahkan nilai external ke config_autoTimeSourcesPriority :
    <string-array name="config_autoTimeSourcesPriority>
            <item>external</item>
            <item>gnss</item>
    </string-array>
    

    Melakukannya akan menginstruksikan Android untuk memberikan saran waktu eksternal sebagai prioritas tertinggi saat menyetel jam sistem. Perangkat keras pada kendaraan menulis saran stempel waktu ke properti EPOCH_TIME EPOCH_TIME yang baru .

  2. Aplikasi yang disediakan vendor membaca properti ini dan memanggil TimeManager.suggestExternal() . Android kemudian dapat menggunakan stempel waktu yang disediakan sebagai nilai jam sistem baru.