การตรวจหาเวลาอัตโนมัติจะรับคำแนะนำเกี่ยวกับเวลาจากแหล่งที่มาต่างๆ เลือกตัวเลือกที่ดีที่สุด แล้วตั้งนาฬิกาของระบบใน Android ให้ตรงกัน Android รุ่นก่อนหน้ามีวิธีตั้งค่าวันที่และเวลา 2 วิธี ได้แก่ ตั้งค่าด้วยตนเองต่อผู้ใช้แต่ละราย หรือตั้งค่าโดยการตรวจหาเวลาอัตโนมัติ และตั้งค่าโดยใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
telephonyใช้สัญญาณโทรศัพท์ของข้อมูลระบุเครือข่ายและเขตเวลา (NITZ)networkใช้เซิร์ฟเวอร์เวลา Network Time Protocol (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
การทดสอบหน่วย
ดู Unit Test พื้นฐานได้ในไฟล์ต่อไปนี้
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 ให้คำแนะนำเวลาภายนอกมีความสำคัญสูงสุดเมื่อตั้งค่านาฬิกาของระบบ ฮาร์ดแวร์ในยานพาหนะจะเขียนคำแนะนำการประทับเวลาไปยัง
EPOCH_TIMEพร็อพเพอร์ตี้ VHAL ใหม่ - แอปที่ผู้ให้บริการจัดหาให้อ่านพร็อพเพอร์ตี้นี้และเรียกใช้
TimeManager.suggestExternal()จากนั้น Android จะใช้การประทับเวลาที่ระบุ เป็นค่านาฬิกาของระบบใหม่