סקירה כללית של משך הזמן

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

סקירה כללית על זמן ואזורי זמן

כדי לקבוע את השעה המקומית של המשתמש להצגה במיקומים כמו שורת המצב, מערכת Android עוקבת אחרי שני מצבים קשורים אך עצמאיים:

  • חותמת הזמן הנוכחית של מערכת Unix
  • אזור הזמן הנוכחי

שעון Unix epoch הנוכחי ואזור הזמן הנוכחי הם מצבים ברמת המכשיר, כלומר הם משותפים לכל המשתמשים במכשיר.

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

אזור הזמן הנוכחי קובע את ההתאמה שיש לבצע כדי להמיר את הזמן הנוכחי של יוניקס (Unix epoch) בזמן מקומי. למשל, במהלך הקיץ בלוס אנג'לס אנג'לס, המכשיר מחסיר 7 שעות מהזמן הנוכחי של יוניקס (Unix epoch) בחורף יורד 8 שעות.

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

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

AOSP מאפשר למשתמשים לקבוע באופן עצמאי אם השעה ואזור הזמן יוגדר עבורם באופן אוטומטי באמצעות המנגנונים הבאים.

  • זיהוי זמן אוטומטי: מבטיח שבמכשיר יש את הזמן הנוכחי של יוניקס (Unix epoch)
  • זיהוי אוטומטי של אזור הזמן: מוודאים שהמכשיר מוגדר נכון אזור הזמן הנוכחי.

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

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

השירות time_detector

time_detector שירות, שנמצא במכשירים עם Android מגרסה 10 ואילך, מנהל זמן אוטומטי זיהוי וזיהוי אובייקטים. כשהתכונה 'זיהוי זמן אוטומטי' מופעלת, המערכת מתאימה את חותמת הזמן הנוכחית של המכשיר לפי מערכת Unix לפי הצורך.

השירות time_detector תמיד נמצא באחד משני המצבים: לא בטוח או בטוח. המצב המשוער או המובהק של השירות נקבע על סמך הצעות לזמנים שהוא מקבל ממקורות שונים.

כאשר השירות time_detector בטוח, כלומר הוא קיבל הצעה עם פרטי זמן של מערכת Unix epoch, היא מבטלת את התקופה הנוכחית של יוניקס (Unix epoch) אם הזמן המוצע שונה מתקופת יוניקס (Unix epoch) הנוכחית.

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

כדי ליצור את הזמן הנוכחי של יוניקס (Unix epoch) באופן אוטומטי, למכשיר יש מקורות שבהם הם יכולים להשתמש. במסמך הזה הם נקראים מקורות. שירות time_detector מתייחס לרצפים של הצעות כהצעות נפרדות על סמך המקור שלהם.

השירות time_detector שומר מצב, כלומר נשמר תיעוד של ההצעה העדכנית ביותר של כל מקור. מוצגות הצעות חדשות עבור time_detector אם למקור יש מידע עדכני יותר על נקודת הזמן הקודמת של יוניקס (Unix epoch) זמינים. השירות time_detector מעריך מחדש הצעות חדשות וקיימות ומעדכן את מצב המכשיר כשמתקבלות הצעות.

למרות ששעון UTC מוסכם באופן בינלאומי, יש סיבות שונות לכך יצירת הזמן הנוכחי של יוניקס (Unix epoch) לא תמיד פשוטה מכשיר Android:

  • שיטת יוניקס (Unix epoch) שונה מעט משעון UTC. כדי להמיר בין שני המצבים האלה צריך לדעת מתי מתרחשות שניות קפיציות. האופן שבו המקורות מטופלים.
  • המקורות עשויים להיות זמינים רק בזמנים מסוימים או מתחת לתאריכים מסוימים בנסיבות השונות. לדוגמה, אם המקור מחייב חיבור לרשת, יכול להיות שהוא יהיה זמין רק כשהמכשיר מחובר לאינטרנט.
  • המקורות יכולים להיות לא מדויקים או לא מדויקים, או שיש בהם שגיאות. לדוגמה, אם מגדל סלולרי של טלפוניה לא עוקב אחרי 'שעון אוניברסלי' בצורה נכונה, המקור של הטלפוניה עשוי לספק הצעות זמן לא מדויקות.
  • יכול להיות שיהיו אי-דיוקים במהלך תחילת התקופה של יוניקס (Unix epoch). לדוגמה, עיכוב ברשת, אגירת נתונים או תזמון תהליכים עלולים לגרום מתחילת הרבעון ועד היום, כדי לא להיות מדויקים.
  • השעון של ההפניה שמשמש להתאמת ההצעה לזמן שחלף מאז קבלת ההצעה עשוי להיות לא מדויק.

יש שני מקורות עיקריים לזיהוי הזמן שמוגדרים לשימוש כברירת מחדל ב-AOSP:

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

גם מקורות הטלפוניה וגם מקורות הרשת מחייבים קישוריות לרשתות חיצוניות, שלא תמיד זמינות.

החל מ-Android 12, מערכת Android תומכת גם המקורות הבאים, שאינם מוגדרים לשימוש כברירת מחדל:

  • GNSS: נעשה שימוש ב-GPS ספק מיקום כדי לקבל זמן ממקור GNSS.
  • חיצוני: מקור כללי שמאפשר ליצרני המכשירים לשלב מקור משלהם של זמן Unix epoch.

הגדרות הזמן

המשתמשים יכולים להפעיל זיהוי זמן אוטומטי דרך מערכת > תאריך ושעה ב אפליקציית ההגדרות של AOSP.

זיהוי אוטומטי של הזמן בהגדרות

איור 1. זיהוי אוטומטי של השעה בהגדרות.

בטבלה הבאה מתוארים אמצעי הבקרה של המשתמש לזיהוי הזמן באפליקציית ההגדרות של AOSP.

*ב-Android מגרסה 11 ומטה, ההגדרה הזו נקראת שימוש השעה שמספקת הרשת

מיקום הגדרות AOSP השם של הגדרות AOSP היקף התנהגות
מערכת > תאריך ושעה הגדרת הזמן באופן אוטומטי* כל המשתמשים

מתג.

כאשר המכשיר מופעל, הוא אחראי לזהות את חיבור ה-Unix הנוכחי בזמן שחלף. כשהאפשרות מושבתת, המשתמשים מקבלים גישה לאמצעי בקרה את הזמן של המכשיר באופן ידני.

כשהמשתמש מזין את הזמן באופן ידני, הוא מזינים את השעה המקומית שלו, ולא את הזמן המקומי במועד שנקבע מראש (Unix epoch) בזמן האימון. כדי לחשב את זמן האפס של Unix הנוכחי, משתמשים באזור הזמן הנוכחי כדי להסיק את זמן האפס של Unix.

הגדרות אישיות

יצרני מכשירים יכולים להגדיר את שירות time_detector בדרכים שונות, למשל, באילו מקורות להשתמש ואיך לתעדף את האותות שמתקבלים מהם.

תעדוף מקורות

החל מגרסה 12 של Android, יצרני המכשירים יכולים לשנות את קובץ התצורה core/res/res/values/config.xml כדי לציין את מקורות השעה שרוצים לכלול בזיהוי הזמן האוטומטי, ואת סדר העדיפויות שבו time_detector מתייחס למקורות האלה.

במכשירים עם Android מגרסה 11 ומטה, עדיפות המקור כתובה בתוך הקוד ["telephony", "network"]. כלומר, הצעות הטלפוניה מקבלות עדיפות מעל הצעות לרשתות.

הגדרות ברירת המחדל של 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>network</item>
    <item>telephony</item>
</string-array>

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

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

הערכים המותרים למקור הם:

גבולות הזמן המותרים

ב-Android 14 נוספה מגבלה על משך הזמן של הצעות לזמנים שמתקבלות מהשירות time_detector. אם המכשיר תומך בתהליכים של 32 ביט, המסגרת מגדירה מגבלה עליונה על הזמן כדי למנוע מהמכשיר להשתמש בהצעת זמן שעלולה להפעיל את הבעיה של Y2038.

ב-Android 12 הוצגה מגבלת זמן נמוכה יותר שמשמשת אימות ההצעות למועדים שהתקבלו בשירות time_detector. נמוכה יותר ערך מוגבל בזמן המשמש להצעות אוטומטיות מוגדר מחותמת הזמן של ה-build. העיקרון הזה הוא ששעה חוקית לא יכולה להיות לפני את קובץ האימג' של המערכת). אם הצעה לזמן היא לפני מגבלת הזמן התחתונה, ההצעה בשירות time_detector נמחקת כי הוא לא תקף אם חותמת הזמן של ה-build נכונה.

במכשירים עם Android מגרסה 11 ומטה, השירות time_detector לא פועל אימות הצעות נכנסות לזמן Unix epoch.

ניפוי באגים ובדיקה של זמן ריצה

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

אינטראקציה עם השירות 'גלאי זמן'

כדי להציג את ההגדרות והמצב של השירות time_detector שירות time_detector, שימוש ב:

adb shell cmd time_detector dump

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

adb shell cmd time_detector help

בפלט העזרה מתוארים גם מאפייני השירות device_config שאפשר להשתמש בהם כדי להשפיע על ההתנהגות של time_detector לצורכי בדיקה או בסביבת הייצור. פרטים נוספים זמינים במאמר הגדרת מכשיר באמצעות השירות device_config.

כדי לאמת את זיהוי הזמן האוטומטי, הבודקים צריכים לדעת מיהם המקורות השירות time_detector נמצא בשימוש. הדוגמה הבאה היא של הפלט הפקודה adb shell cmd time_detector dump, עם המידע על מקור ומצב השירות הנוכחיים:

$ adb shell cmd time_detector dump

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=null
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=23717241
  mEnvironment.systemClockMillis()=1626707861336
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    ...
  Telephony suggestion history:
    ...
  Network suggestion history:
    ...
  Gnss suggestion history:
    ...
  External suggestion history:
    ...

אפשר לפרש את המידע באופן הבא:

מקש הערך
mEnvironment.isAutoTimeDetectionEnabled() האם זיהוי הזמן האוטומטי מופעל.
mEnvironment.autoTimeLowerBound() הגבול התחתון הנוכחי משמש לאימות ההצעות למועדים.
mEnvironment.autoOriginPriorities() המקורות שבשימוש וסדר העדיפויות.

ביומן השינויים של השעון מצוינים מקרים שבהם שירות time_detector שינה את שעון Unix הנוכחי של המכשיר.

המידע על היסטוריית ההצעות מציין את ההצעות כל מקור.

זיהוי אוטומטי של אזור הזמן

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

השירות time_zone_detector

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

כשהזיהוי האוטומטי של אזור הזמן מופעל, השדה time_zone_detector יכול להיות באחת משתי סטטוסים: לא בטוח ובטוח.

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

מצבים מסוימים של השירות time_zone_detector יכולים לכלול מצבים שבהם ל-time_zone_detector אין מידע על אזור זמן לשימוש, או מצבים שבהם יש לו כמה אזורי זמן לבחירה. אלה המדינות:

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

המצב הבטוח או הלא-ודאות של השירות time_zone_detector נקבע לפי הצעות לאזורי זמן שנשלחות באמצעות אלגוריתם.

באופן כללי, ההצעות מגיעות משני סוגים שמתאימים במידה רבה למצבים האפשריים של time_zone_detector: ודאות ולא ודאית. אלה דוגמאות לסוגים של הצעות:

  • type = uncertain, zoneIds = []

    • האלגוריתם לא יודע מהו אזור הזמן.
  • type = certain, zoneIds = ["Europe/London"]

    • האלגוריתם בטוח שהאזור הוא Europe/London.
  • type = certain, zoneIds = []`

    • האלגוריתם הוא בטוח, אבל לא משויך מזהה אזור עם המיקום הנוכחי.
  • סוג = certain, zoneIds = ["America/Denver", "America/Phoenix"]

    • האלגוריתם בטוח שהתשובה היא אחת משני תחומים, אבל לא יכול לבחור בין 'America/Denver' לבין 'America/Phoenix'.

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

השירות time_zone_detector שומר מצב, כלומר נשמר תיעוד של ההצעה העדכנית ביותר שכל אלגוריתם מציע. הצעות חדשות נשלחות לשירות time_zone_detector אם ההצעה הקודמת כבר לא קיימת נכון; כלומר, אם לאלגוריתם יש עכשיו הצעה אחרת, או הם איבדו את היכולת לזהות את אזור הזמן. השירות time_zone_detector מבצע הערכה מחדש של הצעות חדשות וקיימות ומעדכן את מצב המכשיר כשמתקבלות הצעות.

ב-Android יש תמיכה בשני אלגוריתמים לזיהוי של אזורי זמן:

  • טלפוניה
  • מיקום

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

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

מצב חלופי של טלפוניה

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

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

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

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

לפרטי הגדרה של מצב החלופה של הטלפוניה: הגדרות זיהוי אזור זמן.

הגדרות אזור הזמן

המשתמשים יכולים להפעיל ולקבוע את ההגדרות לזיהוי אוטומטי של אזור הזמן אפליקציית ההגדרות AOSP.

זיהוי אוטומטי של אזור הזמן ב&#39;הגדרות&#39;

איור 2. זיהוי אוטומטי של אזור הזמן בהגדרות.

בטבלה הבאה מתוארים אמצעי הבקרה של המשתמשים לזיהוי אזור הזמן באפליקציית ההגדרות של AOSP.

*ב-Android מגרסה 11 ומטה, ההגדרה הזו מסומנת לפי אזור הזמן שמספקת הרשת

המיקום של הגדרות AOSP השם של הגדרות AOSP היקף התנהגות
מערכת > תאריך ושעה הגדרת אזור הזמן באופן אוטומטי* כל המשתמשים

מתג.

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

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

מתג.

התכונה זמינה ב-Android 12 ואילך. המתג הזה הוא מוצגים רק כאשר במכשיר יש תמיכה בזיהוי אזור הזמן של המיקום.

מידע על השינויים שהושקו ב-Android 14 זמין במאמר מכשירים שתומכים רק בזיהוי אזור הזמן של המיקום.

מיקום שימוש במיקום המשתמש הנוכחי

מתג.

מאפשרת או מונעת שימוש במיקום של המכשיר באופן כללי. הערך רלוונטי אם יש תמיכה במכשיר בזיהוי אזור הזמן של המיקום.

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

  • [תאריך ושעה] הגדרה אוטומטית של אזור הזמן: כבוי

    • המשתמש צריך לבחור את אזור הזמן באופן ידני.
  • [תאריך ושעה] הגדרת אזור זמן באופן אוטומטי: מופעל

    • [מיקום] שימוש במיקום: מושבת

      • אותות טלפוניים משמשים לזיהוי אזור הזמן.
    • [מיקום] שימוש במיקום: מופעל

      • [תאריך ושעה] שימוש במיקום לקביעת אזור הזמן: מופעל

        • המיקום משמש לזיהוי אזור הזמן.
      • [תאריך ושעה] שימוש במיקום כדי להגדיר את אזור הזמן: כבוי

        • אותות טלפוניה משמשים לזיהוי השעה תחום.

מכשירים של משתמשים מרובים

מאחר שחלק מההגדרות הרלוונטיות מוגדרות ברמת המשתמש הנוכחי, ההתנהגות של זיהוי אזור הזמן במכשיר עשויה להשתנות כשהמשתמש הנוכחי משתנה במכשיר Android עם כמה משתמשים.

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

מכשירים שתומכים רק באלגוריתם של זיהוי אזור הזמן של המיקום

בקטע הזה מתוארת ההתנהגות במכשירים שתומכים רק באלגוריתם המיקום.

  • Android מגרסה 14 ואילך

    • האפשרות שימוש במיקום לא מוצגת למשתמשים בהגדרות AOSP האפליקציה והמכשיר פועלים כאילו האפשרות שימוש במיקום מופעלת.
    • המערכת מתעלמת מהערך של ההגדרה SettingsProvider ברמת המשתמש location_time_zone_detection_enabled. הערך הזה מתעד את ההעדפה של המשתמש בסוגים אחרים של מכשירים.
  • Android 12 או Android 13

    • האפשרות שימוש במיקום מוצגת למשתמשים באפליקציית ההגדרות של AOSP, והם יכולים להשבית אותה. אם האפשרות מושבתת, המכשיר לא יזהה את אזור הזמן באופן אוטומטי.

התנהגות בזמן מעבר לזיהוי אוטומטי ובחזרה ממנו

כשהמשתמש מחליף את הזיהוי של אזור הזמן מידני לאוטומטי, יכול להיות ש-time_zone_detector כבר יודע מהו אזור הזמן הנוכחי. אם כן, מאחר שהמשתמש מפעיל זיהוי אוטומטי, אזור הזמן של המכשיר עשוי להשתנות בו-זמנית כדי להתאים לדעת השירות של time_zone_detector.

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

זיהוי אזור הזמן של הטלפוניה

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

זיהוי אזור הזמן של המיקום

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

השירות location_time_zone_manager, שהוצג ב-Android 12, פועל בשרת המערכת ומכיל את הקוד שאחראי לשליחת הצעות לאלגוריתמים של מיקום לשירות time_zone_detector. מידע נוסף זמין במאמר זיהוי אזור הזמן של המיקום.

שיקולים לשימוש בתכונות

בקטע הזה מתוארים היבטים של תכונת זיהוי אזור הזמן של המיקום, כדי לעזור ליצרן המכשיר לקבוע אם ליישם את התכונה במכשיר.

השוואה בין טלפוניה לבין זיהוי מיקום

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

זיהוי טלפוניה זיהוי מיקום
תיקון משתנה בהתאם למדינה.

הזמינות והדיוק של MCC ו-NITZ.
תלוי בתצורת התכונה או ברכיבי הפלאגין.

בדרך כלל מידת הנכונות משתנה לפי:
  • הדיוק וקבוע של ספק המיקום.
  • איכות הנתונים של מפת אזורי הזמן.
אפשרות לקבל עדכונים זיהוי הטלפוניה מסתמך על קבצים שנכללים בזמן שניתן לעדכון Zone DataModule (com.android.tzdata APEX). תלוי בתצורת התכונה או ברכיבי הפלאגין.

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

הערה: נתוני המפה של אזורי הזמן לא נכללים במודול של נתוני אזורי הזמן שמשמש לעדכון העותק של TZDB ב-Android ומידע נוסף על אזורי זמן.

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

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

באופן ספציפי, זיהוי אזור הזמן יכול לפעול במצב פסיבי או פעיל היא:

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

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

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

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

פרטים נוספים על תכונות לשמירה על פרטיות המשתמשים זמינים במאמר זיהוי אזור הזמן של המיקום.

הגדרות אישיות

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

הגדרת ה-AOSP הבסיסית היא frameworks/base/core/res/res/values/config.xml

מפתח הגדרה ערך AOSP תיאור
config_supportTelephonyTimeZoneFallback true כאשר true, time_zone_detector משתמש בטלפוניה מצב חלופי. האפשרות הזו זמינה ב-Android 13 גבוהה יותר.

שינוי התנהגות ברירת המחדל של המכשיר

ב-AOSP, הזיהוי האוטומטי של אזור הזמן מופעל כברירת מחדל, כשההגדרה auto_time_zone מוגדרת כ-true. כדי להשבית את זיהוי הזמן האוטומטי כברירת מחדל, מגדירים את הערך של def_auto_time_zone שמוגדר frameworks/base/packages/SettingsProvider/res/values/defaults.xml אל false.

כשמשחזרים גיבוי ממכשיר אחר, הערך של המסגרת מתעדכנים של ההגדרה auto_time_zone כברירת מחדל. כדי לוודא שההגדרה הזו לא תוחזר מגיבוי, צריך לכלול את auto_time_zone במערך restore_blocked_global_settings שמוגדר ב-frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml.

ניפוי באגים ובדיקה של אזור זמן

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

הגדרת מכשיר באמצעות השירות device_config

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

ב-Android מגרסה 12 ואילך, כדי למנוע סימון באופן זמני סנכרון, שימוש ב:

adb shell cmd device_config set_sync_disabled_for_tests persistent

כדי לשחזר את סנכרון הדגלים לאחר בדיקות, יש להשתמש ב:

adb shell cmd device_config set_sync_disabled_for_tests none

אחרי שחזור הסנכרון של הדגלים, מפעילים מחדש את המכשיר.

מידע נוסף זמין ב-$ adb shell cmd device_config help.

אינטראקציה עם השירות של גלאי אזור הזמן (time_zone_Detector)

כדי להציג את ההגדרה והמצב של time_zone_detector שירות time_zone_detector, שימוש ב:

adb shell cmd time_zone_detector dump

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

adb shell cmd time_zone_detector help

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

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

  • אפשר לבדוק באופן חזותי דרך ממשק המשתמש של ההגדרות. מידע נוסף זמין במאמר הבא: הגדרות אזור זמן.
  • משתמשים בשורת הפקודה דרך adb:

    • כדי להשליך את מצב time_zone_detector, יש להשתמש ב-adb shell cmd time_zone_detector dump
    • כדי לשנות את הגדרת המכשיר, משתמשים בפקודות אחרות של time_zone_detector. למידע נוסף, ניתן להשתמש ב-adb shell cmd time_zone_detector help.

הדוגמה הבאה היא של הפלט מהפקודה adb shell cmd time_zone_detector dump, עם מידע על של האלגוריתם ומצב השירות באותיות מודגשות:

$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
  mEnvironment.getCurrentUserId()=0
  mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
  [Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
  mEnvironment.isDeviceTimeZoneInitialized()=true
  mEnvironment.getDeviceTimeZone()=Europe/London
  Time zone change log:
  Manual suggestion history:
...
  Geolocation suggestion history:
...
  Telephony suggestion history:
...

המידע עשוי להתפרש באופן הבא:

מקש הערך
mUserConfigAllowed האם Device Policy Controller מונע מהמשתמש לשלוט בהגדרות התאריך והשעה.
mTelephonyDetectionSupported האם במכשיר יש זיהוי של אזור הזמן בטלפון.
mGeoDetectionSupported האם המכשיר תומך בזיהוי אזור הזמן של המיקום. כאן על המצב אפקטיבי על סמך ההגדרות והנוכחות אונליין של LTZP אחד לפחות.
mAutoDetectionEnabled האם הזיהוי האוטומטי של אזור הזמן מופעל.
mLocationEnabled מתג המיקום הראשי.
mGeoDetectionEnabled מתג האלגוריתם: false מציין את אלגוריתם הטלפוניה, ו-true מציין את אלגוריתם המיקום.

המידע על היסטוריית ההצעות מציין אילו הצעות הוצעו באמצעות הגדרות (ידניות) ובאמצעות האלגוריתמים של הטלפוניה והמיקום.