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