ב-Android מגרסה 12 ואילך, מערכת Android יכולה להשתמש באופן אופציונלי במערכת גלובלית לניווט לווייני (GNSS) כדי להציע זמני תקופת 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
הוא השלישי ברשימת העדיפות אחרי 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