Gambaran Umum Waktu

Halaman ini menjelaskan cara kerja deteksi waktu dan zona waktu di Android. Ini termasuk cara Android secara otomatis mendeteksi waktu dan zona waktu, opsi konfigurasi untuk produsen perangkat, dan informasi pengujian.

Ringkasan waktu dan zona waktu

Guna menentukan waktu lokal pengguna untuk ditampilkan di lokasi seperti status bar, Android melacak dua status terkait, tetapi independen:

  • Waktu Unix epoch saat ini
  • Zona waktu saat ini

Waktu Unix epoch saat ini dan zona waktu saat ini adalah status seluruh perangkat, yang berarti keduanya digunakan bersama oleh semua pengguna perangkat.

Waktu Unix epoch saat ini bukan nilai tetap. Laporan ini diperbarui secara otomatis untuk mencerminkan perjalanan waktu. Selain berlalunya waktu normal, waktu epoch Unix saat ini pada perangkat akan disesuaikan jika dianggap salah, misalnya, setelah perangkat kehilangan daya.

Zona waktu saat ini menentukan penyesuaian yang akan dilakukan untuk mengonversi waktu Unix epoch saat ini menjadi waktu lokal. Misalnya, selama musim panas di Los Angeles, perangkat mengurangi 7 jam dari waktu Unix epoch saat ini, dan di musim dingin, perangkat akan mengurangi 8 jam.

Untuk mendukung penghitungan waktu lokal ini, semua perangkat Android memiliki database yang berisi semua aturan zona waktu global. Untuk mengetahui informasi lebih lanjut mengenai aturan zona waktu, lihat Aturan Zona Waktu.

Saat pengguna melakukan perjalanan ke lokasi baru yang menggunakan zona waktu berbeda, waktu Unix epoch saat ini tidak perlu disesuaikan, tetapi biasanya pengguna ingin melihat waktu lokal, bukan waktu di lokasi sebelumnya. Mengubah zona waktu saat ini akan memastikan bahwa offset yang benar diterapkan ke waktu epoch Unix saat ini untuk menampilkan waktu lokal yang benar untuk lokasi baru.

AOSP memungkinkan pengguna mengontrol secara mandiri apakah waktu dan zona waktu ditetapkan secara otomatis untuk mereka melalui mekanisme berikut.

  • Deteksi waktu otomatis: Memastikan perangkat memiliki waktu epoch Unix saat ini yang benar.
  • Deteksi zona waktu otomatis: Memastikan perangkat memiliki zona waktu yang benar saat ini.

Deteksi waktu otomatis

Bagian ini memberikan ringkasan tentang layanan time_detector yang mengelola deteksi waktu otomatis, kontrol pengguna, opsi konfigurasi, dan detail pengujian.

Layanan time_detector

Layanan time_detector, yang ada di perangkat yang menjalankan Android 10 atau yang lebih tinggi, mengelola deteksi waktu otomatis. Atribut ini menyesuaikan waktu Unix epoch perangkat saat ini sesuai kebutuhan saat deteksi waktu otomatis diaktifkan.

Layanan time_detector selalu berada dalam salah satu dari dua status: tidak pasti atau pasti. Status tertentu atau tidak pasti layanan ditentukan oleh saran waktu yang diterimanya dari berbagai sumber.

Jika sudah pasti, layanan time_detector yang berarti telah menerima saran dengan informasi waktu epoch Unix, layanan akan mengganti waktu epoch Unix saat ini jika saran waktu berbeda dengan waktu epoch Unix saat ini.

Jika time_detector tidak pasti, waktu tidak akan menggantikan waktu saat ini. Status tidak pasti biasanya berarti layanan time_detector belum menerima saran waktu. Layanan time_detector juga menjadi tidak pasti jika saran yang diterima dianggap terlalu lama untuk digunakan. Usia saran dipertimbangkan karena penyesuaian yang menggunakan saran waktu epoch Unix lama mengandalkan jam realtime berlalu di perangkat, yang dianggap tidak akurat dalam periode yang lama.

Untuk menetapkan waktu epoch Unix saat ini secara otomatis, perangkat memiliki berbagai sumber yang dapat digunakan. Ini disebut origin dalam dokumen ini. Layanan time_detector memperlakukan urutan saran sebagai hal yang berbeda berdasarkan asalnya.

Layanan time_detector bersifat stateful, yang berarti layanan tersebut menyimpan catatan saran terbaru yang dibuat oleh setiap origin. Saran baru dibuat untuk time_detector jika origin memiliki informasi waktu epoch Unix terbaru. Layanan time_detector mengevaluasi kembali saran baru dan yang sudah ada, serta memperbarui status perangkat saat saran diterima.

Meskipun waktu UTC disepakati secara internasional, ada berbagai alasan mengapa menetapkan waktu Unix epoch saat ini tidak selalu mudah untuk perangkat Android:

  • Waktu Unix {i>epoch<i} adalah sistem pengaturan waktu yang sedikit berbeda dari waktu UTC. Konversi di antara keduanya memerlukan pengetahuan tentang kapan detik lompatan terjadi dan bagaimana penanganannya oleh origin.
  • Origin mungkin hanya tersedia pada waktu tertentu atau dalam keadaan tertentu. Misalnya, jika origin memerlukan konektivitas jaringan, asal tersebut mungkin hanya tersedia saat perangkat terhubung ke internet.
  • Asal-usulnya mungkin tidak akurat, tidak akurat, atau memiliki kesalahan. Misalnya, jika menara BTS telepon tidak melacak "waktu universal" dengan benar, asal telepon mungkin memberikan saran waktu yang tidak akurat.
  • Mungkin ada ketidakakuratan saat mendapatkan waktu Unix epoch. Misalnya, penundaan jaringan, buffering, atau penjadwalan proses dapat menyebabkan waktu Unix epoch menjadi tidak akurat.
  • Jam referensi yang digunakan untuk menyesuaikan saran waktu yang berlalu karena saran diterima mungkin tidak akurat.

Ada dua origin deteksi waktu utama yang dikonfigurasi untuk digunakan secara default di AOSP:

  • Jaringan: Menggunakan server waktu Network Time Protocol (NTP).
  • Telepon: Menggunakan sinyal telepon Identitas Jaringan dan Zona Waktu (NITZ).

Baik asal telepon maupun jaringan memerlukan konektivitas ke jaringan eksternal, yang tidak selalu tersedia.

Mulai Android 12, Android juga mendukung asal berikut, yang tidak dikonfigurasi untuk digunakan secara default:

  • GNSS: Menggunakan penyedia lokasi GPS untuk mendapatkan waktu dari sumber GNSS.
  • Eksternal: Origin generik yang memungkinkan produsen perangkat mengintegrasikan sumber waktu epoch Unix mereka sendiri.

Setelan waktu

Pengguna dapat mengaktifkan deteksi waktu otomatis di System > Date and Time pada aplikasi Setelan AOSP.

Deteksi waktu otomatis di Setelan

Gambar 1. Deteksi waktu otomatis di Setelan.

Tabel berikut menjelaskan kontrol pengguna untuk deteksi waktu di aplikasi Setelan AOSP.

*Di Android 11 dan yang lebih lama, setelan ini diberi label Gunakan waktu yang disediakan jaringan

Lokasi Setelan AOSP Nama Setelan AOSP Cakupan Perilaku
Sistem > Tanggal dan Waktu Setel waktu secara otomatis* Semua pengguna

Tombol.

Jika aktif, perangkat bertanggung jawab untuk mendeteksi waktu epoch Unix saat ini. Jika dinonaktifkan, pengguna akan diberi kontrol untuk menyetel waktu perangkat secara manual.

Saat memasukkan waktu secara manual, pengguna memasukkan waktu lokal, bukan waktu epoch Unix. Waktu epoch Unix saat ini dihitung menggunakan zona waktu saat ini untuk mendapatkan waktu epoch Unix.

Konfigurasi

Produsen perangkat dapat mengonfigurasi layanan time_detector dengan berbagai cara, seperti origin mana yang akan digunakan dan cara memprioritaskan sinyal darinya.

Prioritas origin

Mulai Android 12, produsen perangkat dapat mengubah core/res/res/values/config.xmlfile konfigurasi untuk menentukan asal waktu yang akan disertakan dalam deteksi waktu otomatis, dan prioritas yang akan time_detector mempertimbangkan origin ini.

Untuk perangkat yang menjalankan Android 11 atau yang lebih rendah, prioritas origin di-hardcode ke ["telephony", "network"], yang berarti saran telepon diprioritaskan di atas saran jaringan.

Konfigurasi AOSP default adalah sebagai berikut:

<!-- 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>network</item>
    <item>telephony</item>
</string-array>

Di Android 12, saran jaringan dan telepon dikonfigurasi sebagai origin untuk digunakan secara default. Saran waktu jaringan diprioritaskan di atas saran waktu telepon. Produsen perangkat dapat mengubah urutan origin agar kembali ke perilaku di Android 11 atau yang lebih rendah, dengan telepon diberi prioritas yang lebih tinggi.

Secara default, jika saran valid dengan prioritas tertinggi cocok dengan waktu jam sistem perangkat saat ini dalam beberapa detik, waktu perangkat tidak akan diubah. Hal ini dilakukan untuk menghindari timbulnya pekerjaan bagi aplikasi terinstal yang memproses intent ACTION_TIME_CHANGED.

Nilai origin yang diizinkan adalah:

Batas waktu yang diizinkan

Android 14 memperkenalkan batas waktu atas untuk saran waktu yang diterima oleh layanan time_detector. Jika perangkat mendukung proses 32-bit, framework akan menetapkan batas waktu atas untuk mencegah perangkat menggunakan saran waktu yang dapat memicu masalah Y2038.

Android 12 memperkenalkan batas waktu lebih rendah yang digunakan untuk memvalidasi saran waktu yang diterima oleh layanan time_detector. Nilai batas waktu lebih rendah yang digunakan untuk saran otomatis ditetapkan dari stempel waktu build. Hal ini sesuai dengan prinsip bahwa waktu yang valid tidak boleh sebelum image sistem perangkat dibuat. Jika saran waktu berada sebelum batas waktu bawah, layanan time_detector akan menghapus saran ini karena tidak dapat valid jika stempel waktu build benar.

Untuk perangkat yang menjalankan Android 11 atau yang lebih rendah, layanan time_detector tidak memvalidasi saran waktu Unix epoch yang masuk.

Proses debug dan pengujian waktu

Bagian ini memberikan informasi tentang cara men-debug dan menguji perilaku layanan time_detector serta komponen lainnya yang digunakan bersama oleh semua origin.

Berinteraksi dengan layanan time_detector

Untuk melihat konfigurasi dan status layanan time_detector dari layanan time_detector, gunakan:

adb shell cmd time_detector dump

Agar dapat melihat perintah tambahan untuk proses debug dan menguji deteksi zona waktu, gunakan:

adb shell cmd time_detector help

Output bantuan juga menjelaskan properti layanan device_config yang dapat digunakan untuk memengaruhi perilaku time_detector untuk pengujian atau produksi. Untuk mengetahui detailnya, lihat Mengonfigurasi perangkat menggunakan layanan device_config.

Untuk memvalidasi deteksi waktu otomatis, penguji harus mengetahui origin mana yang digunakan layanan time_detector. Berikut adalah contoh output dari perintah adb shell cmd time_detector dump, dengan informasi tentang asal dan status layanan saat ini dicetak tebal:

$ adb shell cmd time_detector dump

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=null
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=23717241
  mEnvironment.systemClockMillis()=1626707861336
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    ...
  Telephony suggestion history:
    ...
  Network suggestion history:
    ...
  Gnss suggestion history:
    ...
  External suggestion history:
    ...

Informasi tersebut dapat ditafsirkan sebagai berikut:

Key Nilai
mEnvironment.isAutoTimeDetectionEnabled() Apakah deteksi waktu otomatis diaktifkan.
mEnvironment.autoTimeLowerBound() Batas bawah saat ini yang digunakan untuk memvalidasi saran waktu.
mEnvironment.autoOriginPriorities() Asal yang digunakan dan urutan prioritasnya.

Log perubahan waktu menunjukkan peristiwa saat layanan time_detector telah mengubah waktu epoch Unix saat ini pada perangkat.

Informasi histori saran menunjukkan saran yang telah dibuat oleh setiap origin.

Deteksi zona waktu otomatis

Bagian ini memberikan ringkasan tentang layanan time_zone_detector yang mengelola deteksi zona waktu otomatis, kontrol pengguna di setelan, deteksi zona waktu telepon dan lokasi, serta detail pengujian.

Layanan time_zone_detector

Layanan time_zone_detector, yang ada di perangkat yang menjalankan Android 11 atau yang lebih baru, mengelola deteksi zona waktu otomatis. Mode Izin menyesuaikan zona waktu perangkat saat ini sesuai kebutuhan saat deteksi zona waktu otomatis diaktifkan.

Saat deteksi zona waktu otomatis diaktifkan, time_zone_detector dapat berada dalam salah satu dari dua status: tidak pasti dan pasti.

Jika layanan time_zone_detector berada dalam status tertentu, ini berarti layanan time_zone_detector telah menerima informasi zona waktu yang kuat, yang dapat menyebabkannya mengganti zona waktu saat ini. Jika tidak pasti, artinya tidak menerima informasi atau hanya informasi dengan tingkat keyakinan rendah, yang berarti tidak akan mengganti zona waktu saat ini.

Status tertentu layanan time_zone_detector dapat mencakup status yang time_zone_detector tidak memiliki informasi zona waktu untuk digunakan, atau yang memiliki beberapa zona waktu untuk dipilih. Status tersebut adalah sebagai berikut:

  • Status tertentu dengan nol zona waktu dimasukkan saat perangkat berada di suatu tempat tanpa zona waktu, seperti di perairan internasional atau di wilayah yang disengketakan. Status ini mirip dengan status yang tidak pasti, tetapi menunjukkan bahwa time_zone_detector tidak perlu melakukan tindakan lebih lanjut untuk mencoba menentukan zona waktu.
  • Status tertentu dengan beberapa zona waktu dimasukkan dalam kondisi ambiguitas atau kondisi perbatasan. Dalam status ini, jika zona waktu saat ini adalah salah satu zona waktu yang sudah pasti time_zone_detector, zona waktu saat ini akan dibiarkan apa adanya. Jika tidak, salah satu zona waktu yang tersedia akan digunakan. Hal ini memberi time_zone_detector elemen loyalitas jika pengguna telah memilih zona waktu sebelumnya secara manual atau saat perangkat mendekati batas.

Status tertentu atau tidak pasti layanan time_zone_detector ditentukan oleh saran zona waktu yang dikirim oleh algoritma.

Umumnya, saran tersedia dalam dua jenis yang hampir sama dengan kemungkinan status time_zone_detector: pasti dan tidak pasti. Berikut adalah contoh jenis saran:

  • jenis = uncertain, zoneIds = []

    • Algoritma tidak mengetahui zona waktu.
  • jenis = certain, zoneIds = ["Europe/London"]

    • Algoritma memastikan bahwa zona tersebut berada di Eropa/London.
  • jenis = certain, zoneIds = []`

    • Algoritma sudah pasti, tetapi tidak ada ID zona yang dikaitkan dengan lokasi saat ini.
  • jenis = certain, zoneIds = ["America/Denver", "America/Phoenix"]

    • Algoritma yakin bahwa jawabannya adalah salah satu dari dua zona, tetapi tidak dapat memilih antara "America/Denver" dan "America/Phoenix".

Layanan time_zone_detector memperlakukan urutan saran sebagai hal yang berbeda berdasarkan algoritmanya. Bergantung pada algoritma, saran mungkin juga berisi metadata yang menunjukkan seberapa yakin algoritma tersebut.

Layanan time_zone_detector bersifat stateful, yang berarti layanan tersebut menyimpan catatan saran terbaru yang dibuat oleh setiap algoritma. Saran baru dikirim ke layanan time_zone_detector jika saran sebelumnya tidak lagi benar; yaitu, jika algoritma sekarang memiliki saran yang berbeda, atau jika algoritma telah kehilangan kemampuan untuk mendeteksi zona waktu. Layanan time_zone_detector mengevaluasi ulang saran baru dan yang sudah ada serta memperbarui status perangkat saat saran diterima.

Android mendukung dua algoritma untuk deteksi zona waktu:

  • Telepon
  • Lokasi

Layanan time_zone_detector biasanya menggunakan satu algoritma untuk menentukan zona waktu. Jika algoritme lokasi didukung di perangkat, algoritma yang digunakan perangkat akan ditentukan berdasarkan Setelan zona waktu yang dikonfigurasi oleh pengguna. Jika algoritma yang digunakan menjadi tidak pasti dengan zona waktu, time_zone_detector biasanya tidak menggunakan saran dari algoritma yang berbeda. Saran yang terkait dengan algoritma yang tidak digunakan dapat disimpan dalam memori oleh time_zone_detector, tetapi tidak digunakan kecuali jika algoritma berubah. Saat pengguna mengubah setelan deteksi zona waktu otomatis dan algoritma berubah, saran terbaru yang tersedia untuk algoritma baru akan digunakan.

Untuk mengetahui detail tentang situasi ketika beberapa algoritma digunakan untuk menentukan zona waktu, lihat Mode penggantian Telepon.

Mode penggantian telepon

Pada perangkat yang menjalankan Android 13 dan yang lebih tinggi, layanan time_zone_detector mendukung mode penggantian telepon. Mode ini memungkinkan Android menggunakan saran deteksi telepon untuk sementara dalam situasi saat deteksi lokasi tidak dapat mendeteksi zona waktu atau saat deteksi lokasi memerlukan waktu lebih lama untuk mendeteksi zona waktu daripada deteksi telepon.

Mode penggantian telepon berlaku untuk perangkat yang mendukung deteksi telepon dan lokasi, dan saat pengguna telah mengaktifkan opsi Gunakan lokasi untuk menetapkan zona waktu di Setelan zona waktu. Mode ini otomatis diaktifkan saat perangkat dimulai ulang, dan saat mode pesawat dinonaktifkan.

Di Android 14 dan yang lebih tinggi, penggantian telepon dapat dipicu melalui API pelaporan status LTZP, sehingga, jika LTZP melaporkan bahwa hal tersebut tidak pasti dan kemampuannya untuk mendeteksi lokasi atau zona waktu berkurang karena lingkungannya, mode penggantian telepon akan dipicu.

Saat dalam mode penggantian telepon, layanan time_zone_detector akan menggunakan saran telepon seolah-olah deteksi lokasi dinonaktifkan hingga algoritma lokasi membuat saran tertentu. Setelah menerima saran tertentu, mode penggantian telepon akan dinonaktifkan dan saran lokasi akan digunakan secara eksklusif.

Untuk detail konfigurasi mode penggantian telepon, lihat Konfigurasi deteksi zona waktu.

Setelan zona waktu

Pengguna dapat mengaktifkan dan mengonfigurasi setelan untuk deteksi zona waktu otomatis di aplikasi Setelan AOSP.

Deteksi zona waktu otomatis di Setelan

Gambar 2. Deteksi zona waktu otomatis di Setelan.

Tabel berikut menjelaskan kontrol pengguna untuk deteksi zona waktu di aplikasi Setelan AOSP.

*Di Android 11 dan yang lebih lama, setelan ini diberi label Gunakan zona waktu yang disediakan jaringan

Lokasi Setelan AOSP Nama Setelan AOSP Cakupan Perilaku
Sistem > Tanggal dan Waktu Setel zona waktu secara otomatis* Semua pengguna

Tombol.

Jika aktif, perangkat bertanggung jawab untuk mendeteksi zona waktu saat ini. Saat dinonaktifkan, pengguna akan diberi kontrol untuk menyetel zona waktu perangkat secara manual.

Sistem > Tanggal dan Waktu Gunakan lokasi untuk menyetel zona waktu Pengguna saat ini

Tombol.

Tersedia dari Android 12. Tombol ini hanya ditampilkan jika deteksi zona waktu lokasi didukung di perangkat.

Untuk perubahan yang diperkenalkan pada pasal 14, lihat Perangkat yang hanya mendukung deteksi zona waktu lokasi.

Lokasi Gunakan lokasi Pengguna saat ini

Tombol.

Mengizinkan atau mencegah penggunaan lokasi perangkat secara umum. Nilainya relevan jika deteksi zona waktu lokasi didukung pada perangkat.

Berikut ringkasan perilaku perangkat untuk deteksi zona waktu berdasarkan setelan yang dipilih pengguna:

  • [Date and Time] Setel zona waktu secara otomatis: NONAKTIF

    • Pengguna harus memilih zona waktu secara manual.
  • [Date and Time] Setel zona waktu secara otomatis: AKTIF

    • [Lokasi] Gunakan lokasi: NONAKTIF

      • Sinyal telepon digunakan untuk mendeteksi zona waktu.
    • [Lokasi] Gunakan lokasi: AKTIF

      • [Tanggal dan Waktu] Gunakan lokasi untuk menyetel zona waktu: AKTIF

        • Lokasi digunakan untuk mendeteksi zona waktu.
      • [Tanggal dan Waktu] Gunakan lokasi untuk menyetel zona waktu: NONAKTIF

        • Sinyal telepon digunakan untuk mendeteksi zona waktu.

Perangkat multi-pengguna

Karena beberapa setelan yang terlibat dibatasi untuk pengguna saat ini, perilaku deteksi zona waktu perangkat dapat berubah ketika pengguna saat ini berubah pada perangkat Android multi-pengguna.

Tombol Use location to set time zone dicakup untuk pengguna saat ini dan tidak dibatasi oleh kebijakan perangkat, yang berarti pengguna dapat selalu mengubah nilainya, bahkan saat tombol Set time zone automatically nonaktif atau jika kontrol zona waktu atau waktu lain dibatasi oleh Pengontrol Kebijakan Perangkat.

Perangkat yang hanya mendukung algoritma deteksi zona waktu lokasi

Bagian ini menjelaskan perilaku untuk perangkat yang hanya mendukung algoritma lokasi.

  • Android 14 dan yang lebih baru

    • Opsi Gunakan lokasi tidak ditampilkan kepada pengguna di aplikasi Setelan AOSP dan perangkat berperilaku seolah-olah opsi Gunakan lokasi diaktifkan.
    • Nilai setelan SettingsProvider cakupan pengguna location_time_zone_detection_enabled akan diabaikan. Nilai ini mencatat preferensi pengguna terhadap jenis perangkat lain.
  • Android 12 atau Android 13

    • Opsi Gunakan lokasi dapat dilihat oleh pengguna di aplikasi Setelan AOSP dan pengguna dapat menonaktifkan opsi tersebut. Jika opsi ini dinonaktifkan, perangkat tidak akan otomatis mendeteksi zona waktu.

Perilaku saat beralih ke dan dari deteksi otomatis

Saat pengguna mengganti deteksi zona waktu dari manual ke otomatis, time_zone_detector mungkin sudah pasti menggunakan zona waktu saat ini. Jika demikian, karena pengguna mengaktifkan deteksi otomatis, zona waktu perangkat mungkin diubah pada saat yang sama agar sesuai dengan opini layanan time_zone_detector.

Demikian pula, jika pengguna membuat perubahan di Setelan yang menyebabkan perubahan pada algoritma layanan time_zone_detector saat ini, time_zone_detector mungkin telah menerima saran untuk algoritme baru, sehingga waktu perangkat dapat diubah agar segera cocok dengan opini layanan time_zone_detector.

Deteksi zona waktu telepon

Deteksi zona waktu telepon menggunakan sinyal telepon untuk menentukan zona waktu saat ini. Untuk mengetahui informasi selengkapnya, lihat Deteksi Zona Waktu Telepon.

Deteksi zona waktu lokasi

Deteksi zona waktu lokasi tersedia di Android 12 atau yang lebih baru. Ini adalah fitur deteksi zona waktu otomatis opsional yang memungkinkan perangkat menggunakan lokasinya untuk menentukan zona waktu saat ini.

Layanan location_time_zone_manager, yang diperkenalkan di Android 12, berjalan di server sistem dan berisi kode yang bertanggung jawab untuk mengirimkan saran algoritme lokasi ke layanan time_zone_detector. Untuk informasi selengkapnya, lihat Deteksi Zona Waktu Lokasi.

Pertimbangan adopsi fitur

Bagian ini menjelaskan aspek fitur deteksi zona waktu lokasi untuk membantu produsen perangkat menentukan apakah akan mengadopsi fitur tersebut di perangkat atau tidak.

Membandingkan deteksi lokasi dan telepon

Tabel berikut memberikan perbandingan kelebihan dan kekurangan penggunaan lokasi dibandingkan sinyal telepon untuk deteksi zona waktu.

Deteksi telepon Deteksi lokasi
Ketepatan Bervariasi menurut negara.

Bergantung pada MCC, ketepatan dan ketersediaan NITZ.
Bergantung pada konfigurasi fitur atau komponen plugin.

Koreksi biasanya bervariasi berdasarkan:
  • Akurasi dan keteraturan penyedia lokasi.
  • Kualitas data peta zona waktu.
Kapasitas Update Deteksi telepon bergantung pada file yang terdapat dalam modul Data Zona Waktu yang dapat diperbarui (com.android.tzdata APEX). Bergantung pada konfigurasi fitur atau komponen plugin.

Kapasitas update biasanya bergantung pada apakah perangkat menggunakan data peta zona waktu server atau klien.

Catatan: Data peta zona waktu tidak dimuat dalam modul Data Zona Waktu yang digunakan untuk memperbarui salinan TZDB Android dan informasi zona waktu lainnya.

Produsen perangkat juga harus mempertimbangkan konsistensi versi antara aturan zona waktu dan data peta zona waktu.
Penggunaan daya Tidak ada atau penggunaan daya rendah Bergantung pada setelan lokasi pengguna, plugin yang digunakan, dan biasanya aplikasi lain yang meminta lokasi.
Ketersediaan Khusus perangkat telepon. Biasanya memerlukan SIM yang berfungsi. Deteksi lokasi bergantung pada penyedia lokasi yang tersedia.
Privasi pengguna

Zona waktu pilihan pengguna biasanya ditentukan oleh lokasi geografisnya. Lokasi adalah data sensitif. Pengguna mungkin khawatir tentang pengetahuan lokasi mereka yang dibagikan sebagai bagian dari deteksi zona waktu. Tidak terkait dengan deteksi zona waktu, semua aplikasi yang berjalan di perangkat dapat membaca zona waktu perangkat saat ini tanpa memerlukan izin Android, dan aplikasi dapat menyimpulkan perkiraan lokasi perangkat dari informasi ini.

Lebih spesifiknya, deteksi zona waktu dapat berfungsi melalui cara pasif atau aktif:

  • Pasif: Sesuatu di lingkungan perangkat memberi tahu perangkat tentang zona waktu yang akan digunakan di lingkungan tersebut.
  • Aktif: Perangkat harus memperhitungkan zona waktu untuk perangkat itu sendiri dan bergantung pada setelan privasi pengguna dan persetujuan mereka, mendapatkan lokasi perangkat untuk melakukannya. Kemudian, perangkat dapat berbagi lokasinya dengan layanan eksternal. Lihat diskusi di bawah untuk mengetahui detail tentang privasi dan izin pengguna.

Deteksi pasif, seperti algoritma telepon, tidak memiliki implikasi privasi tambahan bagi pengguna.

Deteksi aktif, seperti algoritme lokasi, melibatkan penentuan lokasi perangkat, yang mungkin tidak ingin disetujui oleh pengguna, dan lokasi dapat dikirim melalui jaringan untuk menentukan ID zona waktu.

Pendekatan Android terhadap privasi pengguna untuk deteksi zona waktu memberi pengguna kemampuan untuk menonaktifkan satu per satu algoritma yang diharapkan aktif. Selain itu, kode platform AOSP tidak menangani langsung lokasi itu sendiri: deteksi lokasi dan memetakan lokasi ke ID zona waktu diserahkan ke komponen plugin yang dikonfigurasi oleh produsen perangkat.

Untuk detail lebih lanjut tentang fitur privasi pengguna, lihat Deteksi Zona Waktu Lokasi.

Konfigurasi

Produsen perangkat dapat mengonfigurasi layanan time_zone_detector untuk mengubah perilakunya. Bagian ini menjelaskan opsi konfigurasi untuk perilaku umum layanan time_zone_detector. Untuk mengetahui detail konfigurasi terkait algoritma deteksi telepon dan zona waktu, lihat Deteksi Zona Waktu Telepon dan Deteksi Zona Waktu Lokasi.

Konfigurasi AOSP dasar berada di frameworks/base/core/res/res/values/config.xml.

Kunci konfigurasi Nilai AOSP Deskripsi
config_supportTelephonyTimeZoneFallback true Saat true, time_zone_detector menggunakan mode penggantian telepon. Fitur ini tersedia untuk Android 13 dan yang lebih baru.

Mengubah perilaku default perangkat

Pada AOSP, deteksi zona waktu otomatis diaktifkan secara default dengan setelan auto_time_zone ditetapkan ke true. Untuk menonaktifkan deteksi waktu otomatis secara default, tetapkan nilai def_auto_time_zone yang ditentukan di frameworks/base/packages/SettingsProvider/res/values/defaults.xml ke false.

Saat memulihkan cadangan dari perangkat lain, framework akan memperbarui nilai setelan auto_time_zone secara default. Jika Anda ingin memastikan bahwa setelan ini tidak dipulihkan dari cadangan, sertakan auto_time_zone dalam array restore_blocked_global_settings yang ditentukan dalam frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml.

Proses debug dan pengujian zona waktu

Bagian ini memberikan informasi tentang cara men-debug dan menguji perilaku layanan time_zone_detector serta komponen lain yang digunakan bersama oleh semua algoritma.

Mengonfigurasi perangkat menggunakan layanan device_config

Layanan device_config adalah mekanisme yang digunakan di Android untuk mengonfigurasi perilaku yang dapat diubah menggunakan nilai yang biasanya diambil dari server jarak jauh berdasarkan kode eksklusif (non-AOSP). Saat menggunakan nilai device_config untuk pengujian, terutama selama pengujian manual yang berjalan lama, perangkat mungkin menyinkronkan flag, yang akan mereset flag dan menghapus nilai yang ditetapkan untuk pengujian.

Di Android 12 atau yang lebih tinggi, untuk mencegah sinkronisasi flag untuk sementara, gunakan:

adb shell cmd device_config set_sync_disabled_for_tests persistent

Untuk memulihkan sinkronisasi tanda setelah pengujian, gunakan:

adb shell cmd device_config set_sync_disabled_for_tests none

Setelah memulihkan sinkronisasi tanda, mulai ulang perangkat.

Untuk informasi selengkapnya, gunakan $ adb shell cmd device_config help.

Berinteraksi dengan layanan time_zone_detector

Untuk melihat konfigurasi time_zone_detector dan status layanan time_zone_detector, gunakan:

adb shell cmd time_zone_detector dump

Agar dapat melihat perintah tambahan untuk proses debug dan menguji deteksi zona waktu, gunakan:

adb shell cmd time_zone_detector help

Output bantuan juga menjelaskan properti layanan device_config yang dapat digunakan untuk memengaruhi perilaku layanan time_zone_detector untuk pengujian atau dalam produksi. Untuk mengetahui detailnya, lihat Mengonfigurasi perangkat menggunakan layanan device_config.

Untuk memvalidasi deteksi zona waktu, penguji harus mengetahui algoritma mana yang digunakan time_zone_detector. Untuk memahami dan memengaruhi algoritma time_zone_detector saat ini, gunakan salah satu opsi berikut:

  • Periksa secara visual melalui UI Setelan. Untuk mengetahui informasi selengkapnya, lihat Setelan zona waktu.
  • Gunakan command line melalui adb:

    • Untuk membuang status time_zone_detector, gunakan adb shell cmd time_zone_detector dump
    • Untuk mengubah setelan perangkat, gunakan perintah time_zone_detector lainnya. Untuk informasi selengkapnya, gunakan adb shell cmd time_zone_detector help.

Berikut adalah contoh output dari perintah adb shell cmd time_zone_detector dump, dengan informasi tentang algoritma saat ini dan status layanan dicetak tebal:

$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
  mEnvironment.getCurrentUserId()=0
  mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
  [Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
  mEnvironment.isDeviceTimeZoneInitialized()=true
  mEnvironment.getDeviceTimeZone()=Europe/London
  Time zone change log:
  Manual suggestion history:
...
  Geolocation suggestion history:
...
  Telephony suggestion history:
...

Informasi tersebut dapat ditafsirkan sebagai berikut:

Key Nilai
mUserConfigAllowed Apakah pengguna dicegah mengontrol setelan tanggal dan waktu oleh Pengontrol Kebijakan Perangkat.
mTelephonyDetectionSupported Apakah perangkat memiliki deteksi zona waktu telepon.
mGeoDetectionSupported Apakah perangkat mendukung deteksi zona waktu lokasi atau tidak. Ini adalah status efektif berdasarkan konfigurasi dan keberadaan setidaknya satu LTZP.
mAutoDetectionEnabled Apakah deteksi zona waktu otomatis diaktifkan atau tidak.
mLocationEnabled Tombol lokasi utama.
mGeoDetectionEnabled Tombol algoritma: false menunjukkan algoritma telepon, dan true menunjukkan algoritme lokasi.

Informasi histori saran menunjukkan saran yang telah dibuat melalui Setelan (manual), serta oleh algoritma telepon dan lokasi.