การตรวจจับเวลาอัตโนมัติ จะได้รับคำแนะนำเวลาจากแหล่งต่างๆ เลือกตัวเลือกที่ดีที่สุด จากนั้นตั้งค่านาฬิการะบบใน Android ให้ตรงกัน Android รุ่นก่อนหน้านี้มีวิธีตั้งวันที่และเวลาได้สองวิธี โดยตั้งค่าด้วยตนเองต่อผู้ใช้หรือโดยการตรวจจับเวลาอัตโนมัติ และตั้งค่าตามตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
-
telephony
ใช้สัญญาณโทรศัพท์ Network Identity and Time Zone (NITZ) -
network
ใช้เซิร์ฟเวอร์เวลา Network Time Protocol (NTP)
แต่ละตัวเลือกต้องมีการเชื่อมต่อกับเครือข่ายภายนอก ซึ่งอาจไม่สามารถใช้ได้ใน Android Automotive เสมอไป ตัวอย่างเช่น ในบางประเทศ รถยนต์บางคันอาจไม่มีระบบโทรศัพท์ในตัว ดังนั้น เวลา ของระบบนำทางด้วยดาวเทียมทั่วโลก (GNSS) จึงมีไว้เป็นแหล่งเวลาของระบบเพื่อให้คุณใช้เมื่อการเชื่อมต่อเครือข่ายไม่พร้อมใช้งาน
Android ที่กำลังจะเปิดตัวนี้มีตัวเลือกเพิ่มเติมสองตัวเลือกในการตรวจหาและตั้งเวลาโดยอัตโนมัติ:
เปิดใช้งานการตรวจจับเวลาอัตโนมัติ
หากต้องการเปิดใช้งานการตรวจจับเวลาอัตโนมัติ อย่าลืมเลือก การตั้งค่า > วันที่และเวลา > วันที่และเวลาอัตโนมัติ :
รูปที่ 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
การทดสอบหน่วย
ดูการทดสอบหน่วยพื้นฐานในไฟล์ต่อไปนี้:
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 ใหม่ชื่อ
EPOCH_TIME
คุณสมบัตินี้แสดงถึงจำนวนมิลลิวินาทีที่ผ่านไปตั้งแต่ 1/1/1970 UTC ค่าของมันสามารถส่งผ่านไปยัง AndroidTimeManager
เพื่อแนะนำเวลาระบบใหม่ได้ ตัวอย่างการใช้งาน VHAL ที่อัปเดตคุณสมบัตินี้มีให้ใน การใช้งานอ้างอิง ด้านล่าง - 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 จะสามารถใช้การประทับเวลาที่ระบุเป็นค่านาฬิกาของระบบใหม่ได้