ใน 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