ใน Android 12 ขึ้นไป Android สามารถใช้
ระบบดาวเทียมนำร่องทั่วโลก (GNSS) เพื่อแนะนำเวลา Epoch ของ Unix ให้กับบริการ time_detector ได้
โดยจะไม่ได้เปิดใช้โดยค่าเริ่มต้นใน AOSP
เมื่อเปิดใช้การตรวจหาเวลา GNSS gnss_time_update_service จะรับฟัง
การอัปเดตตำแหน่งจากแหล่งที่มาของ GNSS แบบพาสซีฟ
และส่งคำแนะนำ GNSS ไปยังบริการ time_detector จากนั้นบริการ time_detector จะพิจารณาว่าจะอัปเดตนาฬิกาของระบบให้ตรงกับคำแนะนำหรือไม่
ผลกระทบต่อการใช้พลังงาน
AOSP gnss_time_update_service จะรับฟังการอัปเดตตำแหน่งแบบพาสซีฟ ซึ่งหมายความว่าบริการจะไม่เปิด GPS หรือใช้พลังงานเพิ่มเติม
โดยอัตโนมัติ นอกจากนี้ยังหมายความว่าหากไม่มีแอปหรือบริการอื่นในระบบ
ขออัปเดตตำแหน่งอย่างต่อเนื่อง gnss_time_update_service จะไม่ได้รับการอัปเดตตำแหน่งและแนะนำเวลา GNSS
การใช้งาน
หากต้องการเปิดใช้การตรวจหาเวลา GNSS ผู้ผลิตอุปกรณ์ต้องเปิดใช้
gnss_time_update_service ในเซิร์ฟเวอร์ระบบอย่างชัดเจน
ต้องอัปเดตทั้งค่า config_enableGnssTimeUpdateService และ
config_autoTimeSourcesPriority ในไฟล์ core/res/res/values/config.xml
 เพื่อเปิดใช้ฟีเจอร์นี้ ตั้งค่าสำหรับ
config_enableGnssTimeUpdateService เป็น true และเพิ่ม gnss ลงในรายการสินค้า
สำหรับ config_autoTimeSourcesPriority ตำแหน่งของ gnss ในรายการลำดับความสำคัญ
จะกำหนดลำดับความสำคัญที่ให้แก่คำแนะนำ GNSS เมื่อเทียบกับคำแนะนำ
จากแหล่งที่มาอื่นๆ
ตัวอย่างต่อไปนี้คือไฟล์ core/res/res/values/config.xml ที่เปิดใช้การตรวจหาเวลา GNSS
 และ gnss อยู่ในอันดับที่ 3 ในรายการลำดับความสำคัญหลังจาก
network และ telephony
<!-- 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>network</item>
        <item>telephony</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>
แก้ไขข้อบกพร่องและทดสอบ
หากต้องการทดสอบการตรวจหาเวลา GNSS ให้ใช้คำสั่ง adb shell cmd location
ใช้คำสั่งเหล่านี้เพื่อเพิ่มผู้ให้บริการตำแหน่งทดสอบที่คุณระบุตำแหน่งและเวลา GNSS ที่เกี่ยวข้องได้
 gnss_time_update_service จะฟัง
ข้อมูลอัปเดตตำแหน่งเหล่านี้และให้คำแนะนำเป็นระยะๆ
ตัวอย่างคำสั่ง adb shell cmd location มีดังนี้
- เปิดสวิตช์ตำแหน่งหลักสำหรับผู้ใช้ที่อยู่เบื้องหน้า (โดยปกติคือผู้ใช้ - 10ในยานยนต์) หากเพิ่งแฟลช คุณจะทำได้ผ่านวิซาร์ดการตั้งค่า- adb shell cmd location set-location-enabled true --user 10
- เพิ่มผู้ให้บริการทดสอบ GPS (โดยปกติจะล้มเหลวในครั้งแรกและจะเกิดข้อยกเว้นด้านความปลอดภัย พร้อมกับ - android from <SOME_UID> not allowed to perform MOCK_LOCATION)- adb shell cmd location providers add-test-provider gps
- เปิดใช้สิทธิ์เข้าถึงตำแหน่งจำลองสำหรับ UID ก่อนหน้า - adb shell appops set UID_PRINTED_IN_PREVIOUS_ERROR android:mock_location allow
- เพิ่มผู้ให้บริการทดสอบ GPS (ควรทำงานได้โดยไม่มีข้อผิดพลาด) - adb shell cmd location providers set-test-provider-enabled gps true
- เปิดใช้ผู้ให้บริการทดสอบ GPS - adb shell cmd location providers set-test-provider-enabled gps true
- ตั้งค่าตำแหน่งพร้อมเวลา (เวลาต้องไม่ต่ำกว่าขีดจำกัดที่กำหนดโดย ขอบเขตล่าง) - adb shell cmd location providers set-test-provider-location gps --location LATITUDE,LONGITUDE --time TIME
