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

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

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

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

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

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

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

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

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

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

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

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

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

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

השירות time_detector

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

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

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

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

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

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

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

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

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

  • רשת: נעשה שימוש בשרתי זמן של Network 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, משתמשים בפקודה: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"]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

מתג.

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

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

מתג.

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

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

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

מתג.

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

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

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

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

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

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

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

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

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

מכשירים עם כמה משתמשים

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

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

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

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

  • 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.
תלוי בהגדרות התכונה או ברכיבי הפלאגין.

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

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