Deteksi zona waktu telepon

Untuk perangkat yang menjalankan Android 11 atau yang lebih rendah, deteksi zona waktu otomatis di AOSP bergantung pada sinyal dari subsistem telepon. Karena ketergantungan pada subsistem telepon, deteksi zona waktu otomatis di Android 11 atau yang lebih rendah terbatas untuk perangkat telepon.

Saat deteksi zona waktu telepon tersedia, fitur ini bekerja menggunakan Kode Negara Seluler (MCC) dan Identitas Jaringan dan Zona Waktu (NITZ) sinyal internal.

Misalnya, perangkat di Prancis dapat mengidentifikasi zona waktu hanya berdasarkan MCC dilaporkan oleh menara BTS terdekat. Hal ini dimungkinkan karena Prancis dikenal sebagai menggunakan satu zona waktu.

Saat suatu negara menggunakan beberapa zona waktu, MCC saja tidak cukup untuk mengidentifikasi zona waktu. Untuk negara tersebut, perangkat juga menggunakan sinyal NITZ untuk mengidentifikasi zona waktu yang benar. Cara ini berjalan dengan baik di banyak tempat di seluruh dunia tetapi sinyal NITZ harus tersedia dan benar, sehingga bergantung pada ekspedisi.

Deteksi zona waktu telepon adalah detektor pasif. Sistem ini berjalan setiap saat dan sehingga saran telepon sering dibuat bahkan ketika ada Algoritma time_zone_detector saat ini tidak termasuk telepon.

Batasan deteksi zona waktu telepon

Bahkan dengan tersedianya sinyal NITZ yang benar, deteksi zona waktu telepon tidak selalu bekerja dengan baik di setiap negara. Ini karena NITZ hanya berisi {i>offset <i}dan informasi musim panas, yang tidak selalu cukup untuk mengidentifikasi suatu serta region dan zona waktu lainnya.

Di banyak tempat di dunia di mana masalah zona waktu ini mungkin terjadi. Misalnya, Denver Colorado dan Phoenix Arizona di AS tidak dapat menggunakan sinyal NITZ selama musim dingin, tetapi juga pada musim lain. Setiap lokasi dengan zona waktu yang tumpang tindih serupa mungkin masalah performa.

Tabel berikut menguraikan perilaku perangkat menurut musim untuk Denver dan Phoenix sebagai contoh:

Lokasi dan musim Informasi dari MCC atau NITZ Zona waktu dan perilaku yang terdeteksi
Denver, Colorado
Musim Dingin
Waktu: 1 Januari 2021 12.00.00
Negara: US
Offset: UTC-7, tanpa pergeseran waktu terang hari
Dua ID zona cocok:
  • Amerika/Denver
  • Amerika/Phoenix

Perangkat dengan benar disetel ke Amerika/Denver.
Phoenix, Arizona
Musim Dingin
Waktu: 1 Januari 2021 12.00.00
Negara: US
Offset: UTC-7, tanpa pergeseran waktu terang hari
Dua ID zona cocok:
  • Amerika/Denver
  • Amerika/Phoenix

Perangkat salah disetel ke Amerika/Denver.
Denver, Colorado
Musim panas
Waktu: 1 Juli 2021 12.00.00
Negara: US
Offset: UTC-6, waktu musim panas
Satu ID zona cocok dengan:
  • Amerika/Denver

Perangkat dengan benar disetel ke Amerika/Denver.
Phoenix, Arizona
Musim panas
Waktu: 1 Juli 2021 12.00.00
Negara: US
Offset: UTC-7, tanpa pergeseran waktu musim panas
Satu ID zona cocok dengan:
  • Amerika/Phoenix

Perangkat dengan benar disetel ke America/Phoenix.

Contoh di atas menunjukkan bahwa selama musim dingin, perangkat Android di Denver atau Arizona harus memilih salah satu dari dua ID zona waktu yang cocok, yang mungkin salah untuk beberapa perangkat, tetapi masih menampilkan waktu lokal yang tampaknya benar. Perangkat jam, kalender, dan aplikasi lain menampilkan waktu lokal yang diharapkan meskipun ID zona waktu salah karena kedua ID zona waktu menghitung ID zona waktu waktu selama musim dingin.

Namun, di musim semi saat Denver mengamati waktu musim panas dan Phoenix melakukannya tidak, beberapa perangkat mungkin menampilkan waktu lokal yang salah untuk sementara jika disetel ke ID zona waktu yang salah untuk lokasi pengguna. Masalah ini telah diperbaiki segera ketika perangkat menerima sinyal NITZ baru (khususnya, yang berisi "UTC-7, tanpa penghematan waktu musim panas" informasi offset), tetapi hal ini dapat memakan waktu dan tergantung pada operator.

Akibatnya, kalender atau aplikasi lain yang menyimpan atau membawa ID zona waktu dari musim dingin ke musim semi mungkin menampilkan dan menggunakan waktu lokal yang salah sampai aplikasi yang relevan memperbarui ID zona waktu.

Proses debug dan pengujian

Bagian berikut menjelaskan perintah shell untuk proses debug dan pengujian fitur deteksi zona waktu telepon.

Penyiapan lingkungan pengujian

Penguji biasanya menggunakan lingkungan pengujian dengan pengujian atau simulasi sel telepon untuk memeriksa perilaku deteksi zona waktu telepon. Sel uji dapat digunakan untuk menyimulasikan jaringan dengan berbagai MCC dan untuk mengirim sinyal NITZ ke perangkat dan kemudian memantau efeknya.

Agar perangkat dapat mendeteksi zona waktu, informasi sinyal NITZ harus benar, konsisten dengan MCC, dan cocokkan dengan salinan TZDB perangkat (aturan zona waktu). Sinyal NITZ yang tidak konsisten dengan MCC menyebabkan algoritma telepon menjadi tidak pasti.

Misalnya, jika MCC yang digunakan oleh sel tes adalah untuk AS, sinyal NITZ harus berisi informasi "waktu universal", selisih, dan waktu musim panas yang yang benar untuk suatu tempat di AS.

Berinteraksi dengan layanan com.android.phone

Untuk memverifikasi bahwa perangkat menerima saran zona waktu telepon yang benar, gunakan:

adb shell dumpsys activity service \
    com.android.phone/com.android.phone.TelephonyDebugService

File ini menyimpan informasi telepon, yang juga dapat ditemukan dalam bug Android laporan. Di perangkat dengan beberapa SIM, terdapat informasi untuk setiap radio SIM.

Log zona waktu menampilkan saran yang telah dikirim oleh proses telepon ke time_zone_detector dan alasan mengirim saran.

TimeServiceHelperImpl:
          SystemClock.elapsedRealtime()=11864061
          System.currentTimeMillis()=1620652067178
          Time Logs:
...

Time zone Logs:
    18602 / 2021-05-10T09:50:21.718Z - Suggesting time zone update:
    TelephonyTimeZoneSuggestion{mSlotIndex=0, mZoneId='null', mMatchType=0, mQuality=0,
    mDebugInfo=[getTimeZoneSuggestion: nitzSignal=TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}},
    countryIsoCode=null, Detection
    reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}})]}
    18831 / 2021-05-10T09:50:21.948Z - Suggesting time zone update:
    TelephonyTimeZoneSuggestion{mSlotIndex=0, mZoneId='Europe/London', mMatchType=3, mQuality=1,
    mDebugInfo=[findTimeZoneFromCountryAndNitz: countryIsoCode=gb,
    nitzSignal=TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}},
    findTimeZoneFromCountryAndNitz: lookupResult=OffsetResult{mTimeZone(ID)=Europe/London,
    mIsOnlyMatch=true}, Detection reason=handleCountryDetected("gb")]}