การตรวจหาเวลาอัตโนมัติ

การตรวจหาเวลาอัตโนมัติจะได้รับคำแนะนำเวลาจากแหล่งที่มาต่างๆ เลือก ตัวเลือกที่ดีที่สุด แล้วตั้งค่านาฬิการะบบใน Android ให้สอดคล้องกัน ให้บริการ Android รุ่นก่อนหน้า การตั้งค่าวันที่และเวลามี 2 วิธี คือ ตั้งค่าด้วยตนเองต่อผู้ใช้ หรือโดยการตรวจหาเวลาอัตโนมัติ และตั้ง ตามตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้

  • telephony ใช้สัญญาณโทรศัพท์สำหรับข้อมูลประจำตัวเครือข่ายและเขตเวลา (NITZ)
  • network ใช้เซิร์ฟเวอร์เวลา Network Time Protocol (NTP)

แต่ละตัวเลือกต้องใช้การเชื่อมต่อกับเครือข่ายภายนอก ซึ่งอาจไม่ได้ให้บริการใน Android เสมอไป ยานยนต์ เช่น ในบางประเทศ รถยนต์บางรุ่นอาจไม่มีโทรศัพท์ในตัว ดังนั้น เวลาของระบบการนำทางผ่านดาวเทียมทั่วโลก (GNSS) เป็นแหล่งต้นทางของระบบ เวลาที่คุณใช้งานเมื่อไม่มีการเชื่อมต่อเครือข่าย

Android รุ่นที่กำลังจะเปิดตัวนี้มีตัวเลือกเพิ่มเติม 2 แบบในการตรวจหาและตั้งเวลาโดยอัตโนมัติ ดังนี้

  • gnss ใช้ดาวเทียมทั่วโลก ระบบการนำทาง (GNSS)
  • external ใช้ คุณสมบัติ VHAL หรือ System API

เปิดใช้การตรวจหาเวลาอัตโนมัติ

หากต้องการเปิดใช้การตรวจหาเวลาอัตโนมัติ ให้เลือกการตั้งค่า > วันที่และ เวลา > วันที่อัตโนมัติและ เวลา:

รูปที่ 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>

ในการเปิดใช้งานฟีเจอร์นี้ ให้ทำดังนี้

  1. อัปเดต config_enableGnssTimeUpdateService ค่าของ ต้องตั้งค่า config_enableGnssTimeUpdateService เป็น true
  2. อัปเดต 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 สามารถส่งผ่านไปยัง Android TimeManager เพื่อแนะนำเวลาของระบบใหม่ VHAL ตัวอย่าง การอัปเดตพร็อพเพอร์ตี้นี้ที่ระบุไว้ใน การใช้งานข้อมูลอ้างอิง ที่ด้านล่าง
  • API ระบบ เมธอดใหม่ที่ชื่อว่า suggestExternalTime() อยู่ใน TimeManager เพื่อมอบคำแนะนำเวลาภายนอกให้กับระบบ หากระบบกำหนดค่าให้นำเวลาที่แนะนำภายนอกมาพิจารณาด้วย (โดยใช้ config_autoTimeSourcesPriorityในไฟล์การกำหนดค่า) การประทับเวลา ที่ส่งผ่านไปยังเมธอดนี้เพื่อตั้งเวลาระบบ หากไม่มีเวลาที่สูงกว่า ที่มีเวลาลำดับความสำคัญสูงกว่า

คุณสามารถใช้โซลูชันเวลาภายนอกตามที่อธิบายไว้ด้านล่าง

  1. อัปเดตไฟล์การกำหนดค่าทรัพยากร (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

  2. แอปที่ได้รับจากผู้ให้บริการอ่านพร็อพเพอร์ตี้นี้และการเรียกใช้ TimeManager.suggestExternal() จากนั้น Android จะใช้การประทับเวลาที่ระบุได้ เป็นค่านาฬิกาของระบบใหม่