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

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

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

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

  • הזמן הנוכחי של יוניקס (Unix epoch)
  • אזור הזמן הנוכחי

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

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

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

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

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

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

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

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

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

שירות גלאי זמן

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

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

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

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

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

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

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

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

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

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

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

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

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

הגדרות זמן

המשתמשים יכולים להפעיל זיהוי שעה אוטומטי דרך System > Date and Time (מערכת > תאריך ושעה) באפליקציית ההגדרות של AOSP.

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

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

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

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

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

מתג.

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

כשהמשתמש מזין את הזמן באופן ידני, הוא מזינים את הזמן המקומי, ולא את הזמן המקומי בתחילת פרק הזמן של יוניקס (Unix epoch). הזמן הנוכחי של פרק הזמן של יוניקס (Unix epoch) מחושב על ידי שימוש באזור הזמן הנוכחי כדי להסיק זמן של מערכת יוניקס (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 ומטה, כאשר לטלפוניה ניתנת עדיפות גבוהה יותר.

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

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

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

ב-Android 14 יש גבול זמן עליון להצעות זמנים שנשלחות על ידי שירות time_detector. אם המכשיר תומך בתהליכים של 32 ביט, ה-framework מגדיר גבול זמן עליון כדי למנוע מהמכשיר להשתמש בהצעה לזמן שעשויה לגרום לבעיה ב-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 epoch) הנוכחי של המכשיר.

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

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

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

  • סוג = uncertain, zoneIds = []

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

    • האלגוריתם בטוח שהאזור הוא אירופה/לונדון.
  • סוג = 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. המתג הזה מוצג רק אם במכשיר יש תמיכה בזיהוי אזור הזמן של המיקום.

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

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

מתג.

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

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

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

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

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

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

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

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

        • אותות טלפוניים משמשים לזיהוי אזור הזמן.

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

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

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

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

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

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

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

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

התשובה נכונה בדרך כלל משתנה לפי:
  • הדיוק וקבוע של ספק המיקום.
  • איכות נתוני המפה של אזור הזמן.
אפשרות לקבל עדכונים זיהוי הטלפוניה מסתמך על קבצים שנכללים במודול Time Zone Data שניתן לעדכן (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 האם הבקר לניהול מדיניות המכשירים מונע מהמשתמש לשלוט בהגדרות התאריך והשעה.
mTelephonyDetectionSupported האם במכשיר יש זיהוי של אזור הזמן בטלפון.
mGeoDetectionSupported האם המכשיר תומך בזיהוי אזור הזמן של המיקום. זהו המצב האפקטיבי על סמך ההגדרה וגם הנוכחות של ערוץ LTZP אחד לפחות.
mAutoDetectionEnabled האם זיהוי אוטומטי של אזור הזמן מופעל.
mLocationEnabled מתג המיקום הראשי.
mGeoDetectionEnabled מתג האלגוריתם: false מציין את אלגוריתם הטלפוניה, ו-true מציין את אלגוריתם המיקום.

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