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