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