การตรวจหาเวลาอัตโนมัติจะรับคำแนะนำเวลาจากแหล่งที่มาต่างๆ เลือกตัวเลือกที่ดีที่สุด แล้วตั้งค่านาฬิกาของระบบใน Android ให้ตรงกัน Android เวอร์ชันก่อนหน้ามีวิธีตั้งค่าวันที่และเวลา 2 วิธี ได้แก่ ตั้งค่าด้วยตนเองตามผู้ใช้หรือโดยการตรวจหาเวลาอัตโนมัติ และตั้งค่าด้วยตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
telephonyใช้สัญญาณโทรศัพท์ของ Network Identity and Time Zone (NITZ)networkใช้เซิร์ฟเวอร์เวลาโปรโตคอลเวลาเครือข่าย (NTP)
ตัวเลือกแต่ละรายการต้องใช้การเชื่อมต่อกับเครือข่ายภายนอก ซึ่งอาจไม่พร้อมใช้งานใน Android Automotive เสมอไป ตัวอย่างเช่น ในบางประเทศ รถยนต์บางรุ่นอาจไม่มีโทรศัพท์ในตัว ดังนั้น ระบบจึงระบุเวลาของระบบนำทางด้วยดาวเทียมทั่วโลก (GNSS) เป็นแหล่งที่มาของเวลาของระบบให้คุณใช้เมื่อไม่มีการเชื่อมต่อเครือข่าย
Android รุ่นที่จะเปิดตัวนี้มีตัวเลือกเพิ่มเติม 2 รายการในการตั้งค่าและตรวจหาเวลาโดยอัตโนมัติ ดังนี้
เปิดใช้การตรวจหาเวลาอัตโนมัติ
หากต้องการเปิดใช้การตรวจหาเวลาอัตโนมัติ ให้เลือกการตั้งค่า > วันที่และเวลา > วันที่และเวลาอัตโนมัติ

รูปที่ 1 เลือกวันที่และเวลาอัตโนมัติ
กำหนดค่าแหล่งที่มาของเวลา
หากต้องการระบุแหล่งเวลาที่จะรวมไว้ในการตรวจหาเวลาอัตโนมัติ และลำดับความสำคัญในการนำแหล่งเวลาเหล่านี้มาพิจารณา คุณต้องแก้ไขไฟล์การกำหนดค่าทรัพยากรของอุปกรณ์ core/res/res/values/config.xml โดยทำดังนี้
<!-- 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>telephony</item>
    <item>network</item>
</string-array>ในตัวอย่างนี้ ระบบจะพิจารณา telephony และ network ในการตรวจจับเวลาอัตโนมัติ และระบบจะจัดลําดับความสําคัญของคําแนะนําเวลา telephony ไว้ก่อนคําแนะนําเวลา network
โดยทั่วไปแล้ว ระบบจะไม่สนใจคําแนะนําจากแหล่งที่มาที่มีลําดับความสําคัญสูงกว่าหากคําแนะนํานั้นไม่ถูกต้องหรือเก่าเกินไป นอกจากนี้ หากคำแนะนำที่ถูกต้องซึ่งมีลำดับความสำคัญสูงสุดตรงกับเวลานาฬิการะบบปัจจุบันของอุปกรณ์ภายในไม่กี่วินาที (ค่าเริ่มต้นคือ 2 วินาที) ระบบจะไม่เปลี่ยนแปลงเวลา
ขอบเขตเวลาล่าง
Android 12 มีขอบเขตเวลาต่ำสุดใหม่ให้ใช้เมื่อตรวจสอบการแนะนำเวลา ก่อนหน้านี้ การตรวจหาเวลาอัตโนมัติจะไม่ตรวจสอบเวลา UTC ที่เข้ามาซึ่งระบบแนะนำ เมื่อใช้ฟีเจอร์นี้ ระบบจะทิ้งเวลาที่ผ่านไปก่อนช่วงล่าง
ค่าขอบเขตล่างจะกำหนดจากวันที่ที่มาจากการประทับเวลาของบิลด์ ซึ่งทำงานตามหลักการที่ว่าเวลาที่ใช้ได้ต้องเกิดขึ้นหลังจากสร้างอิมเมจระบบแล้ว Android จะไม่บังคับใช้ขอบเขตบน
การแนะนำเวลา GNSS
gnssแหล่งที่มาของเวลาเป็นฟีเจอร์ใหม่ใน Android 12 ซึ่งได้จากสัญญาณ GPS ข้อมูลนี้เป็นแหล่งข้อมูลที่เชื่อถือได้สำหรับเวลาที่ telephony และ network ไม่พร้อมให้บริการ
ระบบจะเพิ่มตัวเลือกนี้ลงใน GnssTimeUpdateService ใหม่ใน SystemServer ที่คอยฟังการอัปเดตตำแหน่งแบบพาสซีฟ เมื่อได้รับตำแหน่งที่ถูกต้องแล้ว GnssTimeUpdateService จะแนะนำ TimeDetectorService ซึ่งจะเป็นผู้พิจารณาว่าควรอัปเดตนาฬิกาของระบบหรือไม่
โดยค่าเริ่มต้น แหล่งที่มาของเวลา gnss จะไม่เปิดใช้ใน 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>telephony</item>
    <item>network</item>
    <item>gnss</item>
</string-array>
<!-- Enables the GnssTimeUpdate service. This is the global switch for enabling Gnss time based
    suggestions to TimeDetector service. See also config_autoTimeSourcesPriority. -->
<bool name="config_enableGnssTimeUpdateService">true</bool>วิธีเปิดใช้ฟีเจอร์นี้
- อัปเดต 
config_enableGnssTimeUpdateServiceต้องตั้งค่าconfig_enableGnssTimeUpdateServiceเป็นtrue - อัปเดต 
config_autoTimeSourcesPriorityคุณต้องเพิ่มgnssลงในรายการสินค้าสำหรับconfig_autoTimeSourcesPriorityตําแหน่งของgnssในรายการลําดับความสําคัญจะกําหนดลําดับความสําคัญของคําแนะนํา GNSS เทียบกับค่าจากแหล่งที่มาอื่นๆ 
ผลกระทบต่อกำลังไฟ
GnssTimeUpdateService จะฟังการอัปเดตตำแหน่งแบบพาสซีฟ ซึ่งหมายความว่าแอปจะไม่เปิด GPS เพื่อสิ้นเปลืองพลังงาน ด้วยเหตุนี้ พลังงานที่ใช้ไปเมื่อเปิดใช้แหล่งที่มาของ GNSS จึงแทบจะไม่ต้องคำนึงถึง ซึ่งหมายความว่า GnssTimeUpdateService จะไม่ได้รับการอัปเดตตำแหน่งและแนะนำเวลา GNSS เว้นแต่แอปหรือบริการอื่นในระบบจะขอการอัปเดตตำแหน่ง
การทดสอบ
ชุดเครื่องมือทดสอบความเข้ากันได้ (CTS)
มีการทดสอบ CTS เพื่อยืนยันว่ามีเวลาจาก GNSS ดูรายละเอียดได้ที่
LocationShellCommand.java
การทดสอบ 1 หน่วย
ดูการทดสอบหน่วยพื้นฐานในไฟล์ต่อไปนี้
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
การทดสอบด้วยตนเอง
เราได้เพิ่มคำสั่งใหม่ลงใน LocationShellCommand.java เพื่อทดสอบฟีเจอร์นี้ ใช้คำสั่งเหล่านี้เพื่อเพิ่มผู้ให้บริการทดสอบที่คุณสามารถระบุตำแหน่งและเวลา GNSS ที่เชื่อมโยงได้
GnssTimeUpdateService จะฟังการอัปเดตตำแหน่งเหล่านี้และแสดงคำแนะนำเป็นระยะ
หมายเหตุ: อินเทอร์เฟซของคําสั่งเหล่านี้อาจเปลี่ยนแปลงไปในแต่ละรุ่น
# Enable Master Location Switch in the foreground user (usually user 10 on automotive). # If you just flashed, this can be done through Setup Wizard. adb shell cmd location set-location-enabled true --user 10 # Add GPS test provider (this usually fails the first time and will throw a SecurityException # with "android from <some-uid> not allowed to perform MOCK_LOCATION".) adb shell cmd location providers add-test-provider gps # Enable mock location permissions for previous UID adb shell appops set <uid printed in previous error> android:mock_location allow # Add GPS test provider (Should work with no errors.) adb shell cmd location providers add-test-provider gps # Enable GPS test provider adb shell cmd location providers set-test-provider-enabled gps true # Set location with time (time can't be earlier than the limit set by the lower bound.) adb shell cmd location providers set-test-provider-location gps --location <LATITUDE>,<LONGITUDE> --time <TIME>
การแนะนำเวลาภายนอก
คำแนะนำเวลาภายนอกเป็นอีกวิธีในการให้คำแนะนำเวลาอัตโนมัติแก่ Android ตัวเลือกใหม่นี้ช่วยให้คุณระบุการแนะนำเวลาที่กำหนดเองทั้งหมดให้กับ Android ได้ ซึ่งอาจมาจาก ECU ต่างๆ ซึ่งจะใช้การผสมผสานระหว่างนาฬิกาแบบเรียลไทม์, GNSS, NITZ หรือแหล่งข้อมูลเวลาอื่นๆ ได้
คำแนะนำต่อไปนี้มีให้ใช้งานใน Android 12 เพื่อเป็นexternal
 คำแนะนำเวลา
- พร็อพเพอร์ตี้ VHAL มีพร็อพเพอร์ตี้ VHAL ใหม่ชื่อ 
EPOCH_TIMEพร็อพเพอร์ตี้นี้หมายถึงจํานวนมิลลิวินาทีที่ผ่านไปนับตั้งแต่วันที่ 1/1/1970 (UTC) ระบบจะส่งค่านี้ไปยัง AndroidTimeManagerเพื่อแนะนำเวลาใหม่ของระบบ ตัวอย่างการติดตั้งใช้งาน VHAL ที่อัปเดตพร็อพเพอร์ตี้นี้มีอยู่ในการติดตั้งใช้งานอ้างอิงด้านล่าง - System API มีเมธอดใหม่ชื่อ 
suggestExternalTime()ใน TimeManager เพื่อระบุการแนะนำเวลาภายนอกให้กับระบบ หากระบบได้รับการกําหนดค่าให้พิจารณาคําแนะนําเวลาภายนอก (โดยใช้config_autoTimeSourcesPriorityในไฟล์การกําหนดค่า) ระบบจะใช้การประทับเวลาซึ่งส่งไปยังเมธอดนี้เพื่อตั้งค่าเวลาของระบบ หากไม่มีคําแนะนําเวลาที่มีลําดับความสําคัญสูงกว่า 
คุณสามารถใช้โซลูชันเวลาภายนอกได้ตามที่อธิบายไว้ด้านล่าง
- อัปเดตไฟล์การกําหนดค่าทรัพยากร (
core/res/res/values/config.xml) แล้วเพิ่มค่าexternalลงในconfig_autoTimeSourcesPriority<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>ซึ่งจะเป็นการบอกให้ Android ให้ความสำคัญกับเวลาภายนอกเป็นลำดับความสำคัญสูงสุดเมื่อตั้งค่านาฬิกาของระบบ ฮาร์ดแวร์ในยานพาหนะจะเขียนการแนะนำการประทับเวลาลงในพร็อพเพอร์ตี้ VHAL ใหม่
EPOCH_TIME - แอปที่ผู้ให้บริการระบุจะอ่านพร็อพเพอร์ตี้นี้และเรียกใช้ 
TimeManager.suggestExternal()จากนั้น Android จะใช้การประทับเวลาที่ให้ไว้เป็นค่านาฬิกาของระบบใหม่