การตรวจหาเวลาอัตโนมัติจะรับคำแนะนำเวลาจากแหล่งที่มาต่างๆ เลือกตัวเลือกที่ดีที่สุด แล้วตั้งค่านาฬิกาของระบบใน 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 จะใช้การประทับเวลาที่ให้ไว้เป็นค่านาฬิกาของระบบใหม่