ภาพรวมเวลา

หน้านี้อธิบายวิธีการทำงานของการตรวจหาเขตเวลาและเวลาบน 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 สวิตช์ต้นทาง: 'เท็จ' ระบุต้นทางโทรศัพท์ และ 'จริง' ระบุต้นทางตำแหน่ง

ข้อมูลประวัติคำแนะนำระบุว่ามีคำแนะนำใดบ้างผ่านการตั้งค่า (ด้วยตนเอง) และโดยโทรศัพท์และต้นทางของตำแหน่ง