หน้านี้อธิบายวิธีการทำงานของการตรวจหาเขตเวลาและเวลาบน Android ซึ่งรวมถึงวิธีที่ Android ตรวจหาเวลาและโซนเวลาโดยอัตโนมัติ ตัวเลือกการกำหนดค่าสำหรับผู้ผลิตอุปกรณ์ และข้อมูลการทดสอบ
ภาพรวมของเวลาและเขตเวลา
ในการกำหนดเวลาท้องถิ่นของผู้ใช้สำหรับแสดงในตำแหน่งต่างๆ เช่น แถบสถานะ Android จะติดตามสองสถานะที่เกี่ยวข้องกันแต่ไม่ขึ้นต่อกัน:
- เวลายุค Unix ปัจจุบัน
- เขตเวลาปัจจุบัน
เวลายุคปัจจุบันของ Unix และเขตเวลาปัจจุบันเป็นสถานะของทั้งอุปกรณ์ หมายความว่าผู้ใช้ทุกคนในอุปกรณ์จะใช้ร่วมกัน
เวลายุค Unix ปัจจุบันไม่ใช่ค่าคงที่ มันอัปเดตโดยอัตโนมัติเพื่อสะท้อนถึงกาลเวลา นอกจากเวลาที่ผ่านไปตามปกติแล้ว เวลา Unix epoch ปัจจุบันของอุปกรณ์จะถูกปรับหากพบว่าไม่ถูกต้อง ตัวอย่างเช่น หลังจากที่อุปกรณ์สูญเสียพลังงาน
เขตเวลาปัจจุบันกำหนดการปรับเปลี่ยนที่จะดำเนินการเพื่อแปลงเวลา Unix epoch ปัจจุบันเป็นเวลาท้องถิ่น ตัวอย่างเช่น ในช่วงฤดูร้อนในลอสแองเจลิส อุปกรณ์จะลบ 7 ชั่วโมงจากเวลายุคปัจจุบันของ Unix และในฤดูหนาวจะลบ 8 ชั่วโมง
เพื่อรองรับการคำนวณเวลาท้องถิ่น อุปกรณ์ Android ทั้งหมดมี ฐานข้อมูลของกฎโซนเวลาทั่วโลกทั้งหมด สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกฎของเขตเวลา โปรดดู กฎของเขตเวลา
เมื่อผู้ใช้เดินทางไปยังตำแหน่งใหม่ที่ใช้เขตเวลาอื่น เวลายุค Unix ปัจจุบันไม่จำเป็นต้องปรับ แต่โดยทั่วไปแล้วผู้ใช้ต้องการดูเวลาท้องถิ่นมากกว่าเวลาในตำแหน่งก่อนหน้า การเปลี่ยนโซนเวลาปัจจุบันทำให้แน่ใจว่ามีการใช้ออฟเซ็ตที่ถูกต้องกับเวลา Unix epoch ปัจจุบันเพื่อแสดงเวลาท้องถิ่นที่ถูกต้องสำหรับตำแหน่งใหม่
AOSP ช่วยให้ผู้ใช้สามารถควบคุมได้อย่างอิสระว่าเวลาและเขตเวลาจะถูกตั้งค่าโดยอัตโนมัติหรือไม่ผ่านกลไกต่อไปนี้
- การตรวจจับเวลาอัตโนมัติ: ตรวจสอบให้แน่ใจว่าอุปกรณ์มีเวลายุค Unix ปัจจุบันที่ถูกต้อง
- การตรวจหาโซนเวลาอัตโนมัติ: ตรวจสอบให้แน่ใจว่าอุปกรณ์มีโซนเวลาปัจจุบันที่ถูกต้อง
การตรวจจับเวลาอัตโนมัติ
ส่วนนี้แสดงภาพรวมของบริการ time_detector
ที่จัดการการตรวจหาเวลาอัตโนมัติ การควบคุมของผู้ใช้ ตัวเลือกการกำหนดค่า และรายละเอียดการทดสอบ
บริการ time_detector
บริการ time_detector
บนอุปกรณ์ที่ใช้ Android 10 ขึ้นไป จัดการการตรวจจับเวลาอัตโนมัติ โดยจะปรับเวลา Unix epoch ปัจจุบันของอุปกรณ์ตามความจำเป็นเมื่อเปิดใช้งานการตรวจจับเวลาอัตโนมัติ
บริการ time_detector
จะอยู่ในสถานะใดสถานะหนึ่งจากสองสถานะเสมอ: ไม่แน่ใจ หรือ แน่นอน สถานะที่แน่นอนหรือไม่แน่นอนของบริการจะพิจารณาจาก คำแนะนำด้านเวลา ที่ได้รับจากแหล่งต่างๆ
เมื่อบริการ time_detector
เป็นที่แน่นอน หมายความว่าได้รับคำแนะนำเกี่ยวกับข้อมูลเวลา Unix epoch แล้ว บริการจะแทนที่เวลา Unix epoch ปัจจุบัน หากคำแนะนำเวลาแตกต่างจากเวลา Unix epoch ปัจจุบัน
เมื่อ time_detector
ไม่แน่นอน มันจะไม่ลบล้างเวลาปัจจุบัน สถานะที่ไม่แน่นอนมักหมายความว่าบริการ time_detector
ยังไม่ได้รับคำแนะนำเกี่ยวกับเวลา นอกจากนี้ บริการ time_detector
ยังไม่แน่ใจด้วยว่าคำแนะนำที่ได้รับนั้นถือว่าเก่าเกินไปที่จะใช้หรือไม่ อายุของคำแนะนำได้รับการพิจารณาเนื่องจากการปรับเปลี่ยนโดยใช้คำแนะนำเกี่ยวกับเวลายุคเก่าของ Unix อาศัยนาฬิกาเรียลไทม์ที่ผ่านไปบนอุปกรณ์ ซึ่งถือว่าไม่ถูกต้องในช่วงเวลาที่ยาวนาน
ในการกำหนดเวลา Unix epoch ปัจจุบันโดยอัตโนมัติ อุปกรณ์จะมีแหล่งต่างๆ ที่สามารถใช้ได้ สิ่งเหล่านี้เรียกว่า ต้นกำเนิด ในเอกสารนี้ บริการ time_detector
ปฏิบัติต่อลำดับของคำแนะนำที่แตกต่างกันตามแหล่งที่มา
บริการ time_detector
เป็น stateful ซึ่งหมายความว่าจะเก็บบันทึกคำแนะนำล่าสุดจากแต่ละต้นทาง คำแนะนำใหม่จะถูกส่งไปยัง time_detector
หากต้นทางมีข้อมูลเวลายุค Unix ที่ใหม่กว่า บริการ time_detector
จะประเมินคำแนะนำใหม่และที่มีอยู่อีกครั้ง และอัปเดตสถานะอุปกรณ์เมื่อได้รับคำแนะนำ
แม้ว่าเวลา UTC จะตกลงกันในระดับสากล แต่มีเหตุผลหลายประการที่ทำให้การกำหนดเวลายุค Unix ปัจจุบันไม่ตรงไปตรงมาสำหรับอุปกรณ์ Android เสมอไป:
- Unix epoch time เป็นระบบการบอกเวลาที่แตกต่างกันเล็กน้อยจากเวลา UTC การแปลงระหว่างสองสิ่งนี้จำเป็นต้องมีความรู้ว่าวินาทีอธิกสุรทินเกิดขึ้นเมื่อใดและวิธีจัดการกับจุดกำเนิด
- Origins อาจมีให้บริการในบางช่วงเวลาหรือบางสถานการณ์เท่านั้น ตัวอย่างเช่น หากต้นทางต้องการการเชื่อมต่อเครือข่าย อาจใช้งานได้เฉพาะในขณะที่อุปกรณ์เชื่อมต่อกับอินเทอร์เน็ตเท่านั้น
- จุดเริ่มต้นอาจไม่ถูกต้องหรือไม่ชัดเจน หรือมีข้อผิดพลาด ตัวอย่างเช่น หากเสาสัญญาณโทรศัพท์ไม่ได้ติดตาม "เวลาสากล" อย่างถูกต้อง ต้นทางโทรศัพท์อาจให้คำแนะนำเวลาที่ไม่ถูกต้อง
- อาจมีความไม่ถูกต้องเกิดขึ้นในขณะที่รับเวลา Unix epoch ตัวอย่างเช่น ความล่าช้าของเครือข่าย การบัฟเฟอร์ หรือการกำหนดเวลากระบวนการอาจทำให้เวลายุค Unix ไม่ถูกต้อง
- นาฬิกาอ้างอิงที่ใช้ในการปรับคำแนะนำสำหรับเวลาที่ผ่านไปตั้งแต่ได้รับคำแนะนำอาจไม่ถูกต้อง
มีจุดกำเนิดการตรวจหาเวลาหลักสองแห่งที่กำหนดค่าไว้สำหรับใช้โดยค่าเริ่มต้นใน AOSP:
- โทรศัพท์: ใช้สัญญาณโทรศัพท์ Network Identity and Time Zone (NITZ)
- เครือข่าย: ใช้เซิร์ฟเวอร์เวลาของ Network Time Protocol (NTP)
ทั้งต้นทางโทรศัพท์และเครือข่ายต้องการการเชื่อมต่อกับเครือข่ายภายนอก ซึ่งไม่สามารถใช้งานได้เสมอไป
ตั้งแต่ Android 12 เป็นต้นมา Android ยังรองรับต้นทางต่อไปนี้ ซึ่งไม่ได้กำหนดค่าให้ใช้โดยค่าเริ่มต้น:
- GNSS : ใช้ผู้ให้บริการตำแหน่ง GPS เพื่อรับเวลาจากแหล่ง GNSS
- ภายนอก : ต้นกำเนิดทั่วไปที่อนุญาตให้ผู้ผลิตอุปกรณ์รวมแหล่งที่มาของเวลา Unix epoch ของตนเอง
การตั้งค่าเวลา
ผู้ใช้สามารถเปิดใช้งานการตรวจจับเวลาอัตโนมัติใน ระบบ > วันที่และเวลา ในแอปการตั้งค่า AOSP
รูปที่ 1 การตรวจจับเวลาอัตโนมัติในการตั้งค่า
ตารางต่อไปนี้อธิบายการควบคุมของผู้ใช้สำหรับการตรวจจับเวลาในแอปการตั้งค่า AOSP
*ใน Android 11 และต่ำกว่า การตั้งค่านี้มีข้อความว่า Use network-provided time | |||
ตำแหน่งการตั้งค่า AOSP | ชื่อการตั้งค่า AOSP | ขอบเขต | พฤติกรรม |
---|---|---|---|
ระบบ > วันที่และเวลา | ตั้งเวลาอัตโนมัติ* | ผู้ใช้ทั้งหมด | สลับ เมื่อ เปิด อุปกรณ์จะรับผิดชอบในการตรวจจับเวลา Unix epoch ปัจจุบัน เมื่อ ปิด ผู้ใช้จะได้รับการควบคุมเพื่อตั้งเวลาของอุปกรณ์ด้วยตนเอง |
เมื่อผู้ใช้ป้อนเวลาด้วยตนเอง ผู้ใช้จะป้อนเวลาท้องถิ่น ไม่ใช่เวลา Unix epoch เวลายุค Unix ปัจจุบันคำนวณโดยใช้เขตเวลาปัจจุบันเพื่อให้ได้เวลายุค Unix
การกำหนดค่า
ผู้ผลิตอุปกรณ์สามารถกำหนดค่าบริการ time_detector
ได้หลายวิธี เช่น ต้นทางใดที่จะใช้และวิธีจัดลำดับความสำคัญของสัญญาณจากสิ่งเหล่านั้น
การจัดลำดับความสำคัญของแหล่งกำเนิด
จาก Android 12 ผู้ผลิตอุปกรณ์สามารถเปลี่ยนไฟล์การกำหนดค่า core/res/res/values/config.xml
เพื่อระบุจุดกำเนิดเวลาที่จะรวมในการตรวจจับเวลาอัตโนมัติ และลำดับความสำคัญที่ time_detector
พิจารณาจุดกำเนิดเหล่านี้
สำหรับอุปกรณ์ที่ใช้ Android 11 หรือต่ำกว่า ลำดับความสำคัญต้นทางจะถูกฮาร์ดโค้ดเป็น ["telephony", "network"]
ซึ่งหมายความว่าคำแนะนำเกี่ยวกับโทรศัพท์จะได้รับการจัดลำดับความสำคัญเหนือคำแนะนำเครือข่าย
การกำหนดค่า AOSP เริ่มต้นมีดังนี้:
<!-- 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>
ใน Android 12 คำแนะนำเครือข่ายและโทรศัพท์ได้รับการกำหนดค่าเป็นจุดเริ่มต้นที่จะใช้โดยค่าเริ่มต้น คำแนะนำเวลาเครือข่ายมีความสำคัญเหนือคำแนะนำเวลาโทรศัพท์ ผู้ผลิตอุปกรณ์สามารถเปลี่ยนลำดับของจุดเริ่มต้นเพื่อเปลี่ยนกลับเป็นลักษณะการทำงานใน Android 11 หรือต่ำกว่า ซึ่งโทรศัพท์จะได้รับความสำคัญสูงกว่า
ตามค่าเริ่มต้น หากคำแนะนำที่ถูกต้องที่มีลำดับความสำคัญสูงสุดตรงกับเวลานาฬิการะบบปัจจุบันของอุปกรณ์ภายในสองสามวินาที เวลาของอุปกรณ์ จะไม่ เปลี่ยนแปลง นี่เป็นเพื่อหลีกเลี่ยงการสร้างงานสำหรับแอปที่ติดตั้งซึ่งฟังเจตนา ACTION_TIME_CHANGED
ค่าเริ่มต้นที่อนุญาตคือ:
เวลาที่ลดลง
Android 12 แนะนำขอบเขตเวลาที่ต่ำกว่าซึ่งใช้ในการตรวจสอบคำแนะนำเวลาที่ได้รับจากบริการ time_detector
ค่าขอบเขตเวลาที่ต่ำกว่าถูกตั้งค่าจากการประทับเวลาของบิลด์ ซึ่งทำงานบนหลักการที่ว่าเวลาที่ถูกต้อง ต้องไม่ เกิดขึ้นก่อนที่อิมเมจระบบของอุปกรณ์จะถูกสร้างขึ้น หากคำแนะนำเวลาอยู่ก่อนขอบเขตเวลาที่ต่ำกว่า บริการ time_detector
จะละทิ้งคำแนะนำเนื่องจากไม่สามารถใช้ได้หากการประทับเวลาของบิลด์ถูกต้อง
สำหรับอุปกรณ์ที่ใช้ Android 11 หรือต่ำกว่า บริการ time_detector
จะไม่ตรวจสอบคำแนะนำเวลา Unix ที่เข้ามา
Android ไม่บังคับใช้ขอบเขตเวลาบน
เวลาดีบักและการทดสอบ
ส่วนนี้ให้ข้อมูลเกี่ยวกับวิธีการดีบักและทดสอบลักษณะการทำงานของบริการ time_detector
และส่วนประกอบอื่นๆ ที่แบ่งปันโดยต้นทางทั้งหมด
การโต้ตอบกับบริการ time_detector
หากต้องการดูการกำหนดค่าของบริการ time_detector
และสถานะของบริการ time_detector
ให้ใช้:
adb shell cmd time_detector dump
หากต้องการดูคำสั่งเพิ่มเติมสำหรับการดีบักและทดสอบการตรวจหาเขตเวลา ให้ใช้:
adb shell cmd time_detector help
เอาต์พุตวิธีใช้ยังอธิบายคุณสมบัติของบริการ device_config ที่สามารถใช้เพื่อส่งผลต่อพฤติกรรมของ time_detector
สำหรับการทดสอบหรือในการผลิต สำหรับรายละเอียด โปรดดู การกำหนดค่าอุปกรณ์โดยใช้บริการ device_config
ในการตรวจสอบการตรวจจับเวลาอัตโนมัติ ผู้ทดสอบจะต้องทราบว่าบริการ time_detector
นั้นใช้อยู่ที่ต้นทางใด ต่อไปนี้คือตัวอย่างเอาต์พุตจากคำสั่ง adb shell cmd time_zone_detector dump
โดยมีข้อมูลเกี่ยวกับต้นทางปัจจุบันและสถานะบริการเป็นตัวหนา:
$ 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:
...
ข้อมูลสามารถตีความได้ดังนี้:
สำคัญ | ค่า |
---|---|
mEnvironment.isAutoTimeDetectionEnabled() | เปิดใช้งานการตรวจจับเวลาอัตโนมัติหรือไม่ |
mEnvironment.autoTimeLowerBound() | ขอบเขตล่างปัจจุบันใช้เพื่อตรวจสอบคำแนะนำเวลา |
mEnvironment.autoOriginPriorities() | ที่มาในการใช้งานและลำดับความสำคัญ |
บันทึกการเปลี่ยนแปลงเวลาระบุโอกาสที่บริการ time_detector
เปลี่ยนเวลา Unix epoch ปัจจุบันของอุปกรณ์
ข้อมูลประวัติข้อเสนอแนะระบุว่าคำแนะนำใดที่จัดทำขึ้นโดยแต่ละต้นทาง
การตรวจจับเขตเวลาอัตโนมัติ
ส่วนนี้แสดงภาพรวมของบริการ time_zone_detector
ที่จัดการการตรวจหาโซนเวลาอัตโนมัติ การควบคุมของผู้ใช้ในการตั้งค่า การตรวจจับโซนเวลาของโทรศัพท์และตำแหน่ง และรายละเอียดการทดสอบ
บริการ time_zone_detector
บริการ time_zone_detector
บนอุปกรณ์ที่ใช้ Android 11 ขึ้นไป จัดการการตรวจหาโซนเวลาอัตโนมัติ โดยจะปรับโซนเวลาปัจจุบันของอุปกรณ์ตามความจำเป็นเมื่อเปิดใช้การตรวจหาโซนเวลาอัตโนมัติ
เมื่อเปิดใช้งานการตรวจหาเขตเวลาอัตโนมัติ time_zone_detector
สามารถอยู่ในหนึ่งในสองสถานะ: ไม่แน่นอน และ แน่นอน
เมื่อบริการ time_zone_detector
อยู่ในสถานะที่กำหนด หมายความว่าบริการ time_zone_detector
ได้รับข้อมูลโซนเวลาที่ชัดเจน ซึ่งอาจทำให้เกิดการแทนที่โซนเวลาปัจจุบัน เมื่อไม่แน่นอน หมายความว่าไม่ได้รับข้อมูลหรือได้รับเฉพาะข้อมูลที่มีความเชื่อมั่นต่ำ ซึ่งหมายความว่าจะไม่แทนที่เขตเวลาปัจจุบัน
สถานะบางอย่างของบริการ time_zone_detector
สามารถรวมถึงสถานะที่ time_zone_detector
ไม่มีข้อมูลโซนเวลาที่จะใช้ หรือเมื่อมีหลายโซนเวลาให้เลือก สถานะเหล่านี้มีดังนี้:
- สถานะบางอย่างที่มีโซนเวลาเป็นศูนย์จะถูกป้อนเมื่ออุปกรณ์อยู่ที่ไหนสักแห่งที่ไม่มีโซนเวลา เช่น ในน่านน้ำสากลหรือในพื้นที่พิพาท สถานะนี้คล้ายกับสถานะที่ไม่แน่นอน แต่บ่งชี้ว่า
time_zone_detector
ไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติมเพื่อพยายามระบุโซนเวลา - มีการป้อนสถานะบางอย่างที่มีเขตเวลาหลายเขตซึ่งมีความคลุมเครือหรือเงื่อนไขของเขตแดน ในสถานะนี้ หากโซนเวลาปัจจุบันเป็นหนึ่งในโซนเวลา
time_zone_detector
แน่ใจ โซนเวลาปัจจุบันจะคงเดิม มิฉะนั้น จะใช้หนึ่งในเขตเวลาที่มีอยู่ สิ่งนี้ทำให้time_zone_detector
มีองค์ประกอบที่เหนียวแน่น หากผู้ใช้เลือกโซนเวลาด้วยตนเองก่อนหน้านี้หรือเมื่ออุปกรณ์เข้าใกล้เส้นขอบ
สถานะที่แน่นอนหรือไม่แน่นอนของบริการ time_zone_detector
จะพิจารณาจาก คำแนะนำโซนเวลา ที่ส่งโดย ต้นทาง
โดยทั่วไป คำแนะนำมีสองประเภทที่ใกล้เคียงกับสถานะที่เป็นไปได้ของ time_zone_detector
มากที่สุด: แน่นอน และ ไม่แน่นอน ต่อไปนี้เป็นตัวอย่างของประเภทคำแนะนำ:
ประเภท = "ไม่แน่นอน", zoneIds = []
- ต้นกำเนิดไม่ทราบว่าเขตเวลาคืออะไร
type = "บาง", zoneIds = ["ยุโรป/ลอนดอน"]
- ต้นทางคือโซน "ยุโรป/ลอนดอน"
ประเภท = "แน่นอน", zoneIds = []
- ต้นทางนั้นแน่นอน แต่ไม่มี ID โซนที่เชื่อมโยงกับตำแหน่งปัจจุบัน
type = "บาง", zoneIds = ["อเมริกา/เดนเวอร์", "อเมริกา/ฟีนิกซ์"]
- ต้นทางแน่ใจว่าคำตอบคือหนึ่งในสองโซน แต่ไม่สามารถเลือกระหว่าง "อเมริกา/เดนเวอร์" และ "อเมริกา/ฟีนิกซ์"
บริการ time_zone_detector
จะปฏิบัติต่อลำดับของคำแนะนำที่แตกต่างกันตามแหล่งที่มา คำแนะนำอาจมีข้อมูลเมตาที่ระบุว่าต้นทางมีความแน่นอนเพียงใด ทั้งนี้ขึ้นอยู่กับต้นทาง
บริการ time_zone_detector
เป็น stateful ซึ่งหมายความว่าจะเก็บบันทึกคำแนะนำล่าสุดจากแต่ละต้นทาง คำแนะนำใหม่จะถูกส่งไปยังบริการ time_zone_detector
หากคำแนะนำก่อนหน้านี้ไม่ถูกต้องอีกต่อไป นั่นคือ หากต้นทางมีคำแนะนำที่แตกต่างออกไป หรือหากต้นทางสูญเสียความสามารถในการตรวจหาเขตเวลา บริการ time_zone_detector
จะประเมินคำแนะนำใหม่และที่มีอยู่อีกครั้ง และอัปเดตสถานะอุปกรณ์เมื่อได้รับคำแนะนำ
Android รองรับสองต้นทางสำหรับการตรวจจับเขตเวลา:
- โทรศัพท์
- ที่ตั้ง
บริการ time_zone_detector
ใช้เพียงจุดเริ่มต้นเดียวในการกำหนดเขตเวลา เมื่ออุปกรณ์รองรับต้นทางของตำแหน่ง ต้นทางที่ใช้อยู่ในปัจจุบันจะพิจารณาจาก การตั้งค่าโซนเวลา ที่ผู้ใช้กำหนด เมื่อต้นทางปัจจุบันเกิดความไม่แน่นอนของโซนเวลา time_zone_detector
จะไม่ใช้คำแนะนำจากต้นทางอื่น คำแนะนำที่เกี่ยวข้องกับต้นทางนอกเหนือจากต้นทางปัจจุบันสามารถเก็บไว้ในหน่วยความจำโดย time_zone_detector
แต่จะไม่ถูกใช้เว้นแต่ว่าต้นทางปัจจุบันจะเปลี่ยนไป เมื่อผู้ใช้เปลี่ยนการตั้งค่าสำหรับการตรวจหาเขตเวลาอัตโนมัติและต้นทางปัจจุบันเปลี่ยนไป ระบบจะใช้คำแนะนำล่าสุดที่มีสำหรับต้นทางใหม่
บนอุปกรณ์ที่ใช้ Android 13 ขึ้นไป บริการ time_zone_detector
รองรับ โหมดสำรองโทรศัพท์ โหมดนี้ช่วยให้ Android ใช้คำแนะนำการตรวจหาโทรศัพท์ได้ชั่วคราวในสถานการณ์ที่การตรวจหาตำแหน่งไม่สามารถตรวจหาเขตเวลาได้ หรือเมื่อการตรวจหาตำแหน่งใช้เวลาในการตรวจหาเขตเวลานานกว่าการตรวจหาโทรศัพท์
โหมดสำรองโทรศัพท์ใช้กับอุปกรณ์ที่รองรับทั้งโทรศัพท์และการตรวจจับตำแหน่ง และที่ผู้ใช้เปิดใช้งาน ใช้ตำแหน่งที่ตั้งเพื่อตั้งค่าโซนเวลา ใน การตั้งค่าโซนเวลา โหมดนี้จะเปิดใช้งานโดยอัตโนมัติเมื่อรีบูตอุปกรณ์ และเมื่อปิดใช้งานโหมดเครื่องบิน เมื่ออยู่ในโหมดทางเลือกของโทรศัพท์ บริการ time_zone_detector
จะใช้คำแนะนำเกี่ยวกับโทรศัพท์ราวกับว่าการตรวจหาตำแหน่งถูกปิดใช้งาน จนกว่า ต้นทางของตำแหน่งจะให้คำแนะนำบางอย่าง หลังจากได้รับคำแนะนำบางอย่าง โหมดสำรองโทรศัพท์จะถูกปิดใช้งานและจะใช้คำแนะนำตำแหน่งเท่านั้น
สำหรับรายละเอียดการกำหนดค่าสำหรับโหมดสำรองของโทรศัพท์ โปรดดูที่ การกำหนดค่าการตรวจหาโซนเวลา
การตั้งค่าเขตเวลา
ผู้ใช้สามารถเปิดใช้งานและกำหนดการตั้งค่าสำหรับการตรวจจับโซนเวลาอัตโนมัติในแอพการตั้งค่า AOSP
รูปที่ 2 การตรวจจับเขตเวลาอัตโนมัติในการตั้งค่า
ตารางต่อไปนี้อธิบายการควบคุมของผู้ใช้สำหรับการตรวจจับเขตเวลาในแอปการตั้งค่า AOSP
*ใน Android 11 และต่ำกว่า การตั้งค่านี้มีชื่อว่า ใช้เขตเวลาของเครือข่าย | |||
ตำแหน่งการตั้งค่า AOSP | ชื่อการตั้งค่า AOSP | ขอบเขต | พฤติกรรม |
---|---|---|---|
ระบบ > วันที่และเวลา | ตั้งโซนเวลาอัตโนมัติ* | ผู้ใช้ทั้งหมด | สลับ เมื่อ เปิด อุปกรณ์จะทำหน้าที่ตรวจหาเขตเวลาปัจจุบัน เมื่อ ปิด ผู้ใช้จะได้รับการควบคุมเพื่อตั้งค่าเขตเวลาของอุปกรณ์ด้วยตนเอง |
ระบบ > วันที่และเวลา | ใช้ตำแหน่งเพื่อตั้งค่าเขตเวลา | ผู้ใช้ปัจจุบัน | สลับ มีให้ใน Android 12 การสลับนี้จะแสดงเฉพาะเมื่ออุปกรณ์รองรับการตรวจจับโซนเวลาของสถานที่ |
ที่ตั้ง | ใช้สถานที่ | ผู้ใช้ปัจจุบัน | สลับ อนุญาตหรือป้องกันการใช้ตำแหน่งของอุปกรณ์โดยทั่วไป ค่านี้จะเกี่ยวข้องหากอุปกรณ์รองรับการตรวจจับโซนเวลาของสถานที่ |
ข้อมูลต่อไปนี้แสดงภาพรวมของลักษณะการทำงานของอุปกรณ์สำหรับการตรวจจับเขตเวลาตามการตั้งค่าที่ผู้ใช้เลือก:
[วันที่และเวลา] ตั้งเขตเวลาโดยอัตโนมัติ: ปิด
- ผู้ใช้ต้องเลือกเขตเวลาด้วยตนเอง
[วันที่และเวลา] ตั้งเขตเวลาโดยอัตโนมัติ: เปิด
[ตำแหน่ง] ใช้ตำแหน่ง: ปิด
- สัญญาณโทรศัพท์ใช้เพื่อตรวจจับเขตเวลา (ดูหมายเหตุด้านล่าง)
[ตำแหน่ง] ใช้ตำแหน่ง: เปิด
[วันที่และเวลา] ใช้ตำแหน่งที่ตั้งเพื่อตั้งค่าโซนเวลา: เปิด
- สถานที่ใช้เพื่อตรวจหาเขตเวลา
[วันที่และเวลา] ใช้ตำแหน่งที่ตั้งเพื่อตั้งค่าเขตเวลา: ปิด
- สัญญาณโทรศัพท์ใช้เพื่อตรวจจับเขตเวลา (ดูหมายเหตุด้านล่าง)
อุปกรณ์ของผู้ใช้หลายคน
เนื่องจากการตั้งค่าหลายอย่างที่เกี่ยวข้องถูกกำหนดขอบเขตให้กับผู้ใช้ปัจจุบัน ลักษณะการทำงานการตรวจหาเขตเวลาของอุปกรณ์อาจเปลี่ยนแปลงได้เมื่อผู้ใช้ปัจจุบันเปลี่ยนไปในอุปกรณ์ Android ที่มีผู้ใช้หลายคน
การสลับใช้ตำแหน่งที่ตั้งเพื่อตั้งค่าโซนเวลา ถูกกำหนดขอบเขตให้กับผู้ใช้ปัจจุบันและไม่ถูกจำกัดโดยนโยบายด้านอุปกรณ์ หมายความว่าผู้ใช้สามารถเปลี่ยนค่าได้ตลอดเวลา แม้ว่าการสลับ ตั้งค่าโซนเวลาอัตโนมัติ จะปิดอยู่ หรือหากมีการควบคุมเวลาหรือโซนเวลาอื่นๆ ถูกจำกัดโดยตัวควบคุมนโยบายด้านอุปกรณ์
ลักษณะการทำงานเมื่อเปลี่ยนเป็นและจากการตรวจจับอัตโนมัติ
เมื่อผู้ใช้สลับการตรวจหาโซนเวลาจาก แบบแมนนวล เป็น แบบอัตโนมัติ time_zone_detector
อาจเป็นเขตเวลาปัจจุบันที่แน่นอนอยู่แล้ว หากเป็นเช่นนั้น เนื่องจากผู้ใช้เปิดใช้งานการตรวจจับอัตโนมัติ เขตเวลาของอุปกรณ์อาจเปลี่ยนแปลงพร้อมกันเพื่อให้ตรงกับความเห็นของบริการ time_zone_detector
ในทำนองเดียวกัน เมื่อผู้ใช้ทำการเปลี่ยนแปลงในการตั้งค่าที่ส่งผลให้จุดกำเนิดปัจจุบันของบริการ time_zone_detector
เปลี่ยนไป time_zone_detector
อาจได้รับคำแนะนำสำหรับจุดกำเนิดใหม่ ดังนั้นเวลาของอุปกรณ์อาจเปลี่ยนแปลงเพื่อให้ตรงกับความคิดเห็นของบริการ time_zone_detector
ในทันที
การตรวจจับโซนเวลาของโทรศัพท์
การตรวจจับโซนเวลาของโทรศัพท์ใช้สัญญาณโทรศัพท์เพื่อกำหนดโซนเวลาปัจจุบัน สำหรับข้อมูลเพิ่มเติม โปรดดู การตรวจจับโซนเวลาของโทรศัพท์
การตรวจจับโซนเวลาของสถานที่
การตรวจหาโซนเวลาของสถานที่มีให้บริการใน Android 12 ขึ้นไป เป็นคุณลักษณะการตรวจหาเขตเวลาอัตโนมัติซึ่งเป็นตัวเลือกที่ช่วยให้อุปกรณ์ใช้ตำแหน่งของตนเพื่อระบุเขตเวลาปัจจุบัน
บริการ location_time_zone_manager
ที่เปิดตัวใน Android 12 ทำงานในเซิร์ฟเวอร์ระบบและมีรหัสที่รับผิดชอบในการส่งคำแนะนำที่มาของตำแหน่งไปยังบริการ time_zone_detector
สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การตรวจหาโซนเวลาของสถานที่
ข้อควรพิจารณาในการรับคุณลักษณะ
ส่วนนี้อธิบายลักษณะต่างๆ ของคุณลักษณะการตรวจหาโซนเวลาของสถานที่ เพื่อช่วยให้ผู้ผลิตอุปกรณ์ตัดสินใจว่าจะใช้คุณลักษณะนี้กับอุปกรณ์หรือไม่
การเปรียบเทียบโทรศัพท์และการตรวจจับตำแหน่ง
ตารางต่อไปนี้แสดงการเปรียบเทียบข้อดีและข้อเสียของการใช้ตำแหน่งที่ตั้งแทนสัญญาณโทรศัพท์สำหรับการตรวจจับเขตเวลา
การตรวจจับโทรศัพท์ | การตรวจจับตำแหน่ง | |
---|---|---|
ความถูกต้อง | แตกต่างกันไปในแต่ละประเทศ ขึ้นอยู่กับความถูกต้องของ MCC, NITZ และความพร้อมใช้งาน | ขึ้นอยู่กับการกำหนดค่าคุณลักษณะหรือส่วนประกอบของปลั๊กอิน ความถูกต้องมักจะแตกต่างกันไปตาม:
|
ความสามารถในการอัปเดต | การตรวจจับโทรศัพท์อาศัยไฟล์ที่อยู่ใน โมดูลข้อมูลโซนเวลา ที่อัปเดตได้ (com.android.tzdata APEX) | ขึ้นอยู่กับการกำหนดค่าคุณลักษณะหรือส่วนประกอบของปลั๊กอิน โดยทั่วไปแล้วความสามารถในการอัปเดตจะขึ้นอยู่กับว่าอุปกรณ์ใช้ข้อมูลแผนที่โซนเวลาของเซิร์ฟเวอร์หรือไคลเอ็นต์ หมายเหตุ: ข้อมูลแผนที่โซนเวลาไม่มีอยู่ใน โมดูลข้อมูลโซนเวลา ที่ใช้ในการอัปเดตสำเนา TZDB และข้อมูลโซนเวลาอื่นๆ ของ Android นอกจากนี้ ผู้ผลิตอุปกรณ์ยังต้องพิจารณาความสอดคล้องของเวอร์ชันระหว่างกฎโซนเวลาและข้อมูลแผนที่โซนเวลาด้วย |
การใช้พลังงาน | ไม่มีหรือใช้พลังงานต่ำ | ขึ้นอยู่กับการตั้งค่าตำแหน่งของผู้ใช้ ปลั๊กอินที่ใช้ และโดยทั่วไปแล้วแอปอื่นๆ ขอตำแหน่งใด |
ความพร้อมใช้งาน | อุปกรณ์โทรศัพท์เท่านั้น มักจะต้องใช้ซิมที่ใช้งานได้ | การตรวจหาตำแหน่งขึ้นอยู่กับผู้ให้บริการตำแหน่งที่มี |
ความเป็นส่วนตัวของผู้ใช้
โดยปกติแล้ว เขตเวลาที่ต้องการของผู้ใช้จะพิจารณาจากตำแหน่งที่ตั้งทางภูมิศาสตร์ของผู้ใช้ ตำแหน่งเป็นข้อมูลที่ละเอียดอ่อน ผู้ใช้อาจกังวลเกี่ยวกับความรู้เรื่องตำแหน่งของตนที่ถูกแชร์โดยเป็นส่วนหนึ่งของการตรวจหาเขตเวลา ไม่เกี่ยวข้องกับการตรวจจับโซนเวลา แอพทั้งหมดที่ทำงานบนอุปกรณ์สามารถอ่านโซนเวลาปัจจุบันของอุปกรณ์ได้โดยไม่ต้องขออนุญาตจาก Android และแอพสามารถอนุมานแนวคิดที่ไม่แน่ชัดเกี่ยวกับตำแหน่งที่ตั้งของอุปกรณ์จากข้อมูลนี้
โดยเฉพาะอย่างยิ่ง การตรวจจับโซนเวลาสามารถทำงานผ่านวิธีการแบบพาสซีฟหรือแอคทีฟ:
- Passive: บางอย่างในสภาพแวดล้อมของอุปกรณ์จะบอกเขตเวลาที่จะใช้ในสภาพแวดล้อมนั้น
- ใช้งานอยู่: อุปกรณ์ต้องคำนวณเขตเวลาด้วยตัวเอง และขึ้นอยู่กับการตั้งค่าความเป็นส่วนตัวของผู้ใช้และความยินยอมของผู้ใช้ จะได้รับตำแหน่งที่ตั้งของอุปกรณ์จึงจะทำเช่นนั้นได้ จากนั้นจะสามารถแชร์ตำแหน่งกับบริการภายนอกได้ ดูการสนทนาด้านล่างสำหรับรายละเอียดเกี่ยวกับความเป็นส่วนตัวของผู้ใช้และความยินยอม
การตรวจจับแบบพาสซีฟ เช่น แหล่งกำเนิดโทรศัพท์ ไม่มีผลกระทบด้านความเป็นส่วนตัวเพิ่มเติมสำหรับผู้ใช้
การตรวจหาที่ใช้งานอยู่ เช่น การตรวจหาตำแหน่งต้นทางเกี่ยวข้องกับการระบุตำแหน่งที่ตั้งของอุปกรณ์ ซึ่งผู้ใช้อาจไม่ต้องการยอมรับ และตำแหน่งอาจถูกส่งผ่านเครือข่ายเพื่อกำหนด ID โซนเวลา
แนวทางของ Android ในความเป็นส่วนตัวของผู้ใช้สำหรับการตรวจจับเขตเวลาทำให้ผู้ใช้สามารถปิดใช้งานต้นทางที่คาดว่าจะเปิดใช้งานทีละรายการ นอกจากนี้ รหัสแพลตฟอร์ม AOSP ไม่ได้จัดการโดยตรงกับตำแหน่งที่ตั้ง: การตรวจจับตำแหน่งและการจับคู่ตำแหน่งกับ ID โซนเวลาจะปล่อยให้ส่วนประกอบปลั๊กอินกำหนดค่าโดยผู้ผลิตอุปกรณ์
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับคุณสมบัติความเป็นส่วนตัวของผู้ใช้ โปรดดูที่ การตรวจจับโซนเวลาของสถานที่
การกำหนดค่า
ผู้ผลิตอุปกรณ์สามารถกำหนดค่าบริการ time_zone_detector
เพื่อเปลี่ยนลักษณะการทำงานได้ ส่วนนี้อธิบายตัวเลือกการกำหนดค่าสำหรับลักษณะการทำงานทั่วไปของบริการ time_zone_detector
สำหรับรายละเอียดการกำหนดค่าสำหรับต้นทางการตรวจหาเขตเวลาและโทรศัพท์ โปรดดู ที่การตรวจหาเขตเวลาโทรศัพท์ และ การตรวจหาเขตเวลาของสถาน ที่
การกำหนดค่า AOSP พื้นฐานอยู่ที่ frameworks/base/core/res/res/values/config.xml
คีย์การกำหนดค่า | ค่า AOSP | คำอธิบาย |
---|---|---|
config_supportTelephonyTimeZoneFallback | true | เมื่อ true `time_zone_detector` จะใช้โหมดสำรองของโทรศัพท์ สิ่งนี้มีอยู่ใน Android 13 เป็นต้นไป |
การปรับเปลี่ยนพฤติกรรมเริ่มต้นของอุปกรณ์
ใน AOSP การตรวจหาโซนเวลาอัตโนมัติจะถูกเปิดใช้งานตามค่าเริ่มต้น โดยตั้งค่า auto_time_zone
เป็น true
หากต้องการปิดใช้งานการตรวจหาเวลาอัตโนมัติตามค่าเริ่มต้น ให้ตั้งค่า def_auto_time_zone
ที่กำหนดใน frameworks/base/packages/SettingsProvider/res/values/defaults.xml
เป็น false
เมื่อกู้คืนข้อมูลสำรองจากอุปกรณ์อื่น เฟรมเวิร์กจะอัปเดตค่าของการตั้งค่า auto_time_zone
ตามค่าเริ่มต้น หากคุณต้องการให้แน่ใจว่าการตั้งค่านี้ไม่ถูกกู้คืนจากข้อมูลสำรอง ให้ใส่ auto_time_zone
ในอาร์เรย์ restore_blocked_global_settings
ที่กำหนดไว้ใน frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml
การดีบักและการทดสอบเขตเวลา
ส่วนนี้ให้ข้อมูลเกี่ยวกับวิธีการดีบักและทดสอบลักษณะการทำงานของบริการ time_zone_detector
และคอมโพเนนต์อื่นๆ ที่ใช้ร่วมกันโดยต้นทางทั้งหมด
การกำหนดค่าอุปกรณ์โดยใช้บริการ device_config
บริการ device_config
เป็นกลไกที่ใช้บน Android เพื่อกำหนดค่าลักษณะการทำงานที่แก้ไขได้โดยใช้ค่าที่โดยปกติจะดึงมาจากเซิร์ฟเวอร์ระยะไกลด้วยโค้ดที่เป็นกรรมสิทธิ์ (ไม่ใช่ AOSP) เมื่อใช้ค่า device_config
สำหรับการทดสอบ โดยเฉพาะอย่างยิ่งในระหว่างการทดสอบด้วยตนเองเป็นเวลานาน อุปกรณ์อาจซิงโครไนซ์แฟล็ก ซึ่งจะรีเซ็ตแฟล็กและล้างค่าที่ตั้งไว้สำหรับการทดสอบ
ใน Android 12 หรือสูงกว่า เพื่อป้องกันการซิงโครไนซ์แฟล็กชั่วคราว ให้ใช้:
adb shell cmd device_config set_sync_disabled_for_tests persistent
หากต้องการกู้คืนการซิงโครไนซ์แฟล็กหลังการทดสอบ ให้ใช้:
adb shell cmd device_config set_sync_disabled_for_tests none
หลังจากกู้คืนการซิงโครไนซ์แฟล็กแล้ว ให้รีบูตอุปกรณ์
สำหรับข้อมูลเพิ่มเติม ให้ใช้ $ adb shell cmd device_config help
การโต้ตอบกับบริการ time_zone_detector
หากต้องการดูการกำหนดค่า time_zone_detector
และสถานะของบริการ time_zone_detector
ให้ใช้:
adb shell cmd time_zone_detector dump
หากต้องการดูคำสั่งเพิ่มเติมสำหรับการดีบักและทดสอบการตรวจหาเขตเวลา ให้ใช้:
adb shell cmd time_zone_detector help
เอาต์พุตวิธีใช้ยังอธิบายคุณสมบัติของบริการ device_config
ที่สามารถใช้เพื่อส่งผลต่อพฤติกรรมของบริการ time_zone_detector
สำหรับการทดสอบหรือในการผลิต สำหรับรายละเอียด โปรดดู การกำหนดค่าอุปกรณ์โดยใช้บริการ device_config
ในการตรวจสอบการตรวจจับโซนเวลา ผู้ทดสอบต้องทราบว่า time_zone_detector
ใช้ต้นทางใด หากต้องการทำความเข้าใจและมีอิทธิพลต่อต้นกำเนิดปัจจุบันของ time_zone_detector
ให้ใช้หนึ่งในตัวเลือกต่อไปนี้:
- ตรวจสอบภาพผ่าน UI การตั้งค่า สำหรับข้อมูลเพิ่มเติม โปรดดู การตั้งค่าเขตเวลา
ใช้บรรทัดคำสั่งผ่าน adb:
- หากต้องการดัมพ์สถานะ
time_zone_detector
ให้ใช้adb shell cmd time_zone_detector dump
- หากต้องการแก้ไขการตั้งค่าอุปกรณ์ ให้ใช้คำสั่ง
time_zone_detector
อื่นๆ สำหรับข้อมูลเพิ่มเติม ให้ใช้adb shell cmd time_zone_detector help
- หากต้องการดัมพ์สถานะ
ต่อไปนี้เป็นตัวอย่างของเอาต์พุตจากคำสั่ง adb shell cmd time_zone_detector dump
โดยมีข้อมูลเกี่ยวกับต้นทางปัจจุบันและสถานะบริการเป็นตัวหนา:
$ 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:
...
ข้อมูลสามารถตีความได้ดังนี้:
สำคัญ | ค่า |
---|---|
mUserConfigAllowed | ผู้ใช้ถูกป้องกันไม่ให้ควบคุมการตั้งค่าวันที่และเวลาโดย Device Policy Controller หรือไม่ |
mTelephonyDetectionSupported | อุปกรณ์มีการตรวจจับโซนเวลาของโทรศัพท์หรือไม่ |
mGeoDetectionSupported | อุปกรณ์มีการตรวจจับโซนเวลาของสถานที่หรือไม่ นี่คือสถานะ ที่มีผล ตามการกำหนดค่า และ การมีอยู่ของ LTZP อย่างน้อยหนึ่งรายการ |
mAutoDetectionEnabled | เปิดใช้งานการตรวจจับเขตเวลาอัตโนมัติหรือไม่ |
mLocationEnabled | สลับตำแหน่งหลัก |
mGeoDetectionEnabled | สวิตช์ต้นทาง: 'เท็จ' ระบุต้นทางโทรศัพท์ และ 'จริง' ระบุต้นทางตำแหน่ง |
ข้อมูลประวัติคำแนะนำระบุว่ามีคำแนะนำใดบ้างผ่านการตั้งค่า (ด้วยตนเอง) และโดยโทรศัพท์และต้นทางของตำแหน่ง