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

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

  • telephony ใช้สัญญาณโทรศัพท์ Network Identity and Time Zone (NITZ)
  • network ใช้เซิร์ฟเวอร์เวลา Network Time Protocol (NTP)

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

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

  • 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

การทดสอบหน่วย

ดูการทดสอบหน่วยพื้นฐานในไฟล์ต่อไปนี้:

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