สำหรับอุปกรณ์ที่ใช้ Android 11 หรือต่ำกว่า การตรวจหาเขตเวลาอัตโนมัติในโครงการโอเพนซอร์ส Android (AOSP) จะอาศัยสัญญาณจากระบบย่อยโทรคมนาคม เนื่องจากต้องอาศัยระบบย่อยโทรคมนาคม การตรวจหาเขตเวลาอัตโนมัติใน Android 11 หรือต่ำกว่าจึงจำกัดไว้สำหรับอุปกรณ์โทรคมนาคม
เมื่อมีการตรวจหาเขตเวลาโทรคมนาคม ระบบจะใช้รหัสประเทศ มือถือ (MCC) และสัญญาณข้อมูลระบุตัวตนเครือข่ายและเขตเวลา (NITZ)
ตัวอย่างเช่น อุปกรณ์ในเบลเยียมสามารถระบุเขตเวลาได้โดยอาศัยเพียง MCC ที่รายงานโดยเสาสัญญาณโทรศัพท์มือถือที่อยู่ใกล้เคียง ซึ่งเป็นไปได้เนื่องจากทราบกันว่าเบลเยียมใช้เขตเวลาเดียว
เมื่อประเทศหนึ่งๆ ใช้เขตเวลาหลายเขต MCC เพียงอย่างเดียวก็ไม่เพียงพอที่จะระบุเขตเวลา สำหรับประเทศเหล่านี้ อุปกรณ์จะใช้สัญญาณ NITZ เพื่อระบุเขตเวลาที่ถูกต้องด้วย วิธีนี้ใช้ได้ดีในหลายๆ ที่ทั่วโลก แต่ต้องมีสัญญาณ NITZ ที่พร้อมใช้งานและถูกต้อง จึงขึ้นอยู่กับผู้ให้บริการเครือข่าย
การตรวจหาเขตเวลาโทรคมนาคมเป็นเครื่องตรวจจับแบบ พาสซีฟ ซึ่งทำงานตลอดเวลา ดังนั้นระบบจึงมักจะให้คำแนะนำเกี่ยวกับโทรคมนาคมแม้ว่าอัลกอริทึม time_zone_detector ที่ใช้งานอยู่จะไม่ใช่โทรคมนาคมก็ตาม
ข้อจำกัดของการตรวจหาเขตเวลาโทรคมนาคม
แม้ว่าจะมีสัญญาณ NITZ ที่ถูกต้องพร้อมใช้งาน แต่การตรวจหาเขตเวลาโทรคมนาคมก็ไม่ได้ผลดีเสมอไปในทุกประเทศ เนื่องจาก NITZ มีเพียงข้อมูลออฟเซ็ตและข้อมูลเวลาออมแสง ซึ่งอาจไม่เพียงพอที่จะระบุเขตเวลาได้อย่างไม่ซ้ำกัน
มีหลายที่ทั่วโลกที่อาจเกิดปัญหาเกี่ยวกับเขตเวลา เช่น เดนเวอร์ โคโลราโด และฟีนิกซ์ แอริโซนา ในสหรัฐอเมริกา ไม่สามารถแยกความแตกต่างได้โดยใช้สัญญาณ NITZ ในช่วงฤดูหนาว แต่แยกได้ในฤดูอื่นๆ สถานที่ใดก็ตามที่มีเขตเวลาซ้อนทับกันในลักษณะเดียวกันอาจพบปัญหาประเภทนี้
ตารางต่อไปนี้แสดงลักษณะการทำงานของอุปกรณ์ตามฤดูกาลสำหรับเดนเวอร์และฟีนิกซ์เป็นตัวอย่าง
| สถานที่และฤดูกาล | ข้อมูลจาก MCC หรือ NITZ | เขตเวลาและลักษณะการทำงานที่ตรวจพบ |
|---|---|---|
| เดนเวอร์ โคโลราโด ฤดูหนาว |
เวลา: 1 มกราคม 2021 12:00:00 ประเทศ: สหรัฐอเมริกา ออฟเซ็ต: UTC-7, ไม่มีเวลาออมแสง |
รหัสโซน 2 รายการตรงกัน
อุปกรณ์ตั้งค่าเป็น America/Denver อย่างถูกต้อง |
| ฟีนิกซ์ แอริโซนา ฤดูหนาว |
เวลา: 1 มกราคม 2021 12:00:00 ประเทศ: สหรัฐอเมริกา ออฟเซ็ต: UTC-7, ไม่มีเวลาออมแสง |
รหัสโซน 2 รายการตรงกัน
อุปกรณ์ตั้งค่าเป็น America/Denver อย่างไม่ถูกต้อง |
| เดนเวอร์ โคโลราโด ฤดูร้อน |
เวลา: 1 กรกฎาคม 2021 12:00:00 ประเทศ: สหรัฐอเมริกา ออฟเซ็ต: UTC-6, มีเวลาออมแสง |
รหัสเขตเวลา 1 รายการตรงกัน
อุปกรณ์ตั้งค่าเป็น America/Denver อย่างถูกต้อง |
| ฟีนิกซ์ แอริโซนา ฤดูร้อน |
เวลา: 1 กรกฎาคม 2021 12:00:00 ประเทศ: สหรัฐอเมริกา ออฟเซ็ต: UTC-7, ไม่มีเวลาออมแสง |
รหัสเขตเวลา 1 รายการตรงกัน
อุปกรณ์ตั้งค่าเป็น America/Phoenix อย่างถูกต้อง |
ตัวอย่างในตารางแสดงให้เห็นว่าในช่วงฤดูหนาว อุปกรณ์ Android ในเดนเวอร์หรือแอริโซนาต้องเลือกรหัสเขตเวลา 1 รายการจาก 2 รายการที่ตรงกัน ซึ่งอาจไม่ถูกต้องสำหรับอุปกรณ์บางเครื่อง แต่ยังคงแสดงเวลาท้องถิ่นที่ดูเหมือนถูกต้อง นาฬิกา ปฏิทิน และแอปอื่นๆ ในอุปกรณ์จะแสดงเวลาท้องถิ่นที่คาดไว้แม้ว่ารหัสเขตเวลาจะไม่ถูกต้องก็ตาม เนื่องจากรหัสเขตเวลาทั้ง 2 รายการคำนวณเวลาท้องถิ่นเดียวกันในช่วงฤดูหนาว
อย่างไรก็ตาม ในฤดูใบไม้ผลิเมื่อเดนเวอร์ใช้เวลาออมแสง แต่ฟีนิกซ์ไม่ได้ใช้ อุปกรณ์บางเครื่องอาจแสดงเวลาท้องถิ่นที่ไม่ถูกต้องชั่วคราวหากตั้งค่ารหัสเขตเวลาไม่ถูกต้องสำหรับตำแหน่งของผู้ใช้ ระบบจะแก้ไขปัญหานี้ทันทีที่อุปกรณ์ได้รับสัญญาณ NITZ ใหม่ (โดยเฉพาะสัญญาณที่มีข้อมูลออฟเซ็ต "UTC-7, ไม่มีเวลาออมแสง") แต่การดำเนินการนี้อาจใช้เวลาสักครู่และขึ้นอยู่กับผู้ให้บริการเครือข่าย
ด้วยเหตุนี้ ปฏิทินหรือแอปอื่นๆ ที่จัดเก็บหรือโอนรหัสเขตเวลาจากฤดูหนาวไปยังฤดูใบไม้ผลิอาจแสดงและใช้เวลาท้องถิ่นที่ไม่ถูกต้องจนกว่าแอปที่เกี่ยวข้องจะอัปเดตรหัสเขตเวลา
ดีบักและทดสอบ
ส่วนต่อไปนี้อธิบายคำสั่งเชลล์สำหรับการแก้ไขข้อบกพร่องและทดสอบฟีเจอร์การตรวจหาเขตเวลาโทรคมนาคม
การตั้งค่าสภาพแวดล้อมการทดสอบ
โดยทั่วไปแล้ว ผู้ทดสอบจะใช้สภาพแวดล้อมการทดสอบที่มีเซลล์โทรคมนาคมสำหรับการทดสอบหรือจำลองเพื่อตรวจสอบลักษณะการทำงานของการตรวจหาเขตเวลาโทรคมนาคม เซลล์ทดสอบสามารถใช้เพื่อจำลองเครือข่ายที่มี MCC ต่างกัน และเพื่อส่งสัญญาณ NITZ ไปยังอุปกรณ์ แล้วตรวจสอบผลกระทบ
อุปกรณ์จะตรวจหาเขตเวลาได้ก็ต่อเมื่อข้อมูลสัญญาณ NITZ ถูกต้อง สอดคล้องกับ MCC และตรงกับสำเนา IANA TZDB (กฎเขตเวลา) ของอุปกรณ์ สัญญาณ NITZ ที่ไม่สอดคล้องกับ MCC จะทำให้อัลกอริทึมโทรคมนาคมไม่แน่ใจ
ตัวอย่างเช่น หาก MCC ที่เซลล์ทดสอบใช้เป็นของสหรัฐอเมริกา สัญญาณ NITZ ต้องมี UTC, ออฟเซ็ต และข้อมูลเวลาออมแสงที่ถูกต้องสำหรับที่ใดที่หนึ่งในสหรัฐอเมริกา
โต้ตอบกับบริการ com.android.phone
หากต้องการยืนยันว่าอุปกรณ์ได้รับคำแนะนำเกี่ยวกับเขตเวลาโทรคมนาคมที่ถูกต้อง ให้ใช้คำสั่งต่อไปนี้
adb shell dumpsys activity service \
com.android.phone/com.android.phone.TelephonyDebugServiceคำสั่งนี้จะแสดงข้อมูลโทรคมนาคม ซึ่งดูได้ในรายงานข้อบกพร่องของ Android ด้วย ในอุปกรณ์ที่มีซิมหลายรายการ จะมีข้อมูลสำหรับวิทยุของซิมแต่ละรายการ
บันทึกเขตเวลา จะแสดงคำแนะนำที่กระบวนการโทรคมนาคมส่งไปยัง time_zone_detector และเหตุผลในการส่งคำแนะนำ
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")]}