זיהוי זמן אוטומטי

זיהוי זמן אוטומטי מקבל הצעות זמן ממקורות שונים, בוחר את האפשרות הטובה ביותר ולאחר מכן מכוון את שעון המערכת באנדרואיד כך שיתאים. מהדורות קודמות של אנדרואיד סיפקו שתי דרכים להגדיר תאריך ושעה, או שהוגדרו ידנית לכל משתמש או על ידי זיהוי זמן אוטומטי, והוגדרו על ידי אחת מהאפשרויות הבאות:

  • telephony משתמשת באותות טלפוניה ברשת זהות ואזור זמן (NITZ).
  • network משתמשת בשרתי זמן של Network Time Protocol (NTP).

כל אפשרות דורשת חיבורים לרשתות חיצוניות, שלא תמיד זמינות ב-Android Automotive. לדוגמה, במדינות מסוימות, ייתכן שלחלק מהמכוניות אין טלפוניה מובנית. לכן, זמן מערכות ניווט לווייניות גלובליות (GNSS) מסופק כמקור לזמן מערכת לשימושך כאשר קישוריות הרשת אינה זמינה.

מהדורת אנדרואיד קרובה זו מספקת שתי אפשרויות נוספות לזיהוי והגדרת זמן אוטומטית:

  • 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) שניות), השעה לא תשתנה.

זמן תחתון

אנדרואיד 12 מספק זמן נמוך יותר לשימוש בעת אימות הצעות זמן. לפני תכונה זו, זיהוי זמן אוטומטי לא היה מאמת את זמן ה-UTC הנכנס המוצע. עם תכונה זו, זמנים שחולפים לפני הגבול התחתון נמחקים.

הערך התחתון נקבע מתאריך הנגזר מחותמת הזמן של הבנייה. זה עובד על העיקרון שזמן חוקי לא יכול להתרחש לפני שתמונת המערכת נבנתה. אנדרואיד לא אוכפת גבול עליון.

הצעות לזמן GNSS

מקור הזמן gnss חדש באנדרואיד 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>

הצעות זמן חיצוני

הצעות זמן חיצוניות הן דרך נוספת לספק הצעות זמן אוטומטיות לאנדרואיד. האפשרויות החדשות הללו מאפשרות לך לספק הצעות זמן מותאמות לחלוטין לאנדרואיד, שיכולות לנבוע מ-ECU שונים, אשר בתורם יכולים להשתמש בשילוב של שעון זמן אמת, GNSS, NITZ או כל מקור זמן אחר.

ההצעות הבאות זמינות באנדרואיד 12 כדי לשקול אותן כהצעות זמן external :

  • מאפייני VHAL. מסופק מאפיין 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>
    

    פעולה זו מורה לאנדרואיד לתת להצעות זמן חיצוניות את העדיפות הגבוהה ביותר בעת הגדרת שעון המערכת. חומרה על הרכב כותבת הצעת חותמת זמן למאפיין החדש EPOCH_TIME VHAL .

  2. אפליקציה שסופקה על ידי הספק קוראת מאפיין זה וקוראת ל- TimeManager.suggestExternal() . לאחר מכן, אנדרואיד יכולה להשתמש בחותמת הזמן שסופקה כערך שעון המערכת החדש.