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

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

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

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

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

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

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

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

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

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

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

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

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

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

השירות time_detector

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

השירות time_detector תמיד נמצא באחד משני מצבים: certain או uncertain. המצב של השירות (בטוח או לא בטוח) נקבע לפי הצעות לזמנים שהוא מקבל ממקורות שונים.

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

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

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

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

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

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

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

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

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

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

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

הגדרות השעה

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

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

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

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

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

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

מתג.

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

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

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

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

תעדוף מקורות

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

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

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

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

אינטראקציה עם השירות 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:
    ...

המידע הזה יכול להתפרש כך:

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

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

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

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

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

השירות time_zone_detector

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

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

כששירות 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: certain ו-uncertain. אלה דוגמאות לסוגי הצעות:

  • type = uncertain, zoneIds = []

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

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

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

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

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

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

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

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

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

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

מצב מעבר לטלפוניה

במכשירים שמותקנת בהם גרסת 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 עם כמה משתמשים.

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

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

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

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

    • האפשרות שימוש במיקום לא מוצגת למשתמשים באפליקציית ההגדרות של AOSP, והמכשיר מתנהג כאילו האפשרות שימוש במיקום מופעלת.
    • המערכת מתעלמת מהערך של ההגדרה SettingsProviderlocation_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.
תלוי בהגדרת התכונה או ברכיבי הפלאגין.

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

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

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

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

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

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

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

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

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

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

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

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

יצרני מכשירים יכולים להגדיר את שירות 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 שאפשר להשתמש בהם כדי להשפיע על ההתנהגות של השירות 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:
...

המידע הזה יכול להתפרש כך:

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

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