זיהוי זמן אוטומטי מקבל הצעות זמן ממקורות שונים, בוחר האפשרות הטובה ביותר, ואז מגדירה את שעון המערכת ב-Android כך שיתאים. סופקו גרסאות קודמות של Android יש שתי דרכים להגדיר תאריך ושעה, באופן ידני לכל משתמש או באמצעות זיהוי זמן אוטומטי, ולהגדיר באחת מהאפשרויות הבאות:
- הספק
telephony
משתמש באותות טלפוניה של Network Identity ו-Time Zone (NITZ). - המשתנה
network
משתמש בשרתי זמן של Network Time Protocol (NTP).
כל אפשרות מחייבת חיבורים לרשתות חיצוניות, שלא תמיד זמינות ב-Android. כלי רכב. לדוגמה, במדינות מסוימות יכול להיות שבחלק מהמכוניות אין מערכת טלפוניה מובנית. לכן, הזמן של Global לווייני ניווט לווייני (GNSS) מסופק כמקור של המערכת שבו להשתמש כשהחיבור לרשת לא זמין.
בגרסה הקרובה של Android יש עוד שתי אפשרויות לזיהוי ולהגדרת זמן באופן אוטומטי:
הפעלת זיהוי הזמן האוטומטי
כדי להפעיל זיהוי זמן אוטומטי, עליך לבחור באפשרות הגדרות > תאריך ו זמן > תאריך &אוטומטי שעה:
איור 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 נכנס. בעזרת התכונה הזו, משך הזמן שחולף לפני הגבול התחתון הוא נמחקו.
ערך הגבול התחתון נקבע לפי תאריך שנגזר מחותמת הזמן של ה-build. התכונה פועלת ב העיקרון שזמן חוקי לא יכול להתרחש לפני שתמונת המערכת נוצרה. אין ב-Android לאכוף גבול עליון.
הצעות זמן ל-GNSS
מקור הזמן של gnss
הוא חדש ב-Android 12 ומסופק על ידי אותות GPS. הדבר
מקור מהימן לזמן שבו אין זמינות של telephony
ו-network
.
האפשרות הזו נוספה אל GnssTimeUpdateService
החדש ב
SystemServer שמאזינים באופן פסיבי לעדכוני מיקום. כשמתקבל מיקום חוקי,
ההצעה TimeDetectorService
כוללת את GnssTimeUpdateService
,
ואז קובע אם צריך לעדכן את שעון המערכת.
כברירת מחדל, מקור הזמן 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>
כדי להפעיל את התכונה הזו:
- יש לעדכן את
config_enableGnssTimeUpdateService
. הערך של הערך שלconfig_enableGnssTimeUpdateService
חייב להיותtrue
. - יש לעדכן את
config_autoTimeSourcesPriority
. צריך להוסיף אתgnss
אל רשימת פריטים עבורconfig_autoTimeSourcesPriority
. המיקום שלgnss
ברשימת העדיפות קובעת את העדיפות שתינתן להצעות GNSS, ביחס לערכים ממקורות אחרים.
השפעה על חשמל
GnssTimeUpdateService
מאזין באופן פסיבי לעדכוני מיקום, כלומר
אף פעם לא מפעילה את ה-GPS באופן פעיל כדי לצרוך חשמל נוסף. כתוצאה מכך, האנרגיה שנצרכת
שמקור ה-GNSS הוא זניח. המשמעות היא גם שאלא אם אפליקציה או שירות אחרים
המערכת מבקשת באופן פעיל עדכוני מיקום, GnssTimeUpdateService
לא מקבלת מיקום
מעדכנים ומציעים זמן של GNSS.
בדיקה
חבילה לבדיקת תאימות (CTS)
מתבצעת בדיקת CTS כדי לאמת שיש זמן זמין שניתן ל-GNSS. פרטים נוספים זמינים במאמר
LocationShellCommand.java
בדיקות יחידה (unit testing)
ראו את בדיקות היחידה הבסיסיות בקובץ הבא:
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
בקובץ התצורה), חותמת הזמן שמועברת לשיטה הזו משמשת להגדרת זמן המערכת, אם אין ערך גבוה יותר יש הצעות זמינות לזמן בעדיפות גבוהה.
תוכלו להטמיע פתרון זמן חיצוני כפי שמתואר בהמשך:
- עדכון קובץ התצורה של המשאב (
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. - אפליקציה שסופקה על ידי ספק קוראת את הנכס הזה ומבצעת קריאה
TimeManager.suggestExternal()
לאחר מכן מערכת Android תוכל להשתמש בחותמת הזמן שסופקה כערך שעון המערכת החדש.