בדף הזה מוסבר איך פועל זיהוי השעה ואזור הזמן ב-Android. כולל האופן שבו מערכת Android מזהה באופן אוטומטי זמן ואזורי זמן, אפשרויות הגדרה ליצרני מכשירים ומידע על בדיקות.
סקירה כללית של אזורי זמן וזמן
כדי לקבוע את הזמן המקומי של משתמש להצגה במיקומים כמו שורת הסטטוס, מערכת Android עוקבת אחרי שני מצבים קשורים אך עצמאיים:
- הזמן הנוכחי של יוניקס (Unix epoch)
- אזור הזמן הנוכחי
השעה הנוכחית ב-Unix epoch ואזור הזמן הנוכחי הם מצבים בכל המכשיר, כלומר הם משותפים לכל המשתמשים במכשיר.
הזמן הנוכחי של תחילת המילניום ב-Unix הוא לא ערך קבוע. הוא מתעדכן באופן אוטומטי כדי לשקף את הזמן שחלף. בנוסף לחלוף הזמן הרגיל, שעון Unix הנוכחי של המכשיר מתואם אם הוא נמצא לא נכון, למשל אחרי שהמכשיר נותק מהחשמל.
אזור הזמן הנוכחי קובע את ההתאמה שצריך לבצע כדי להמיר את השעה הנוכחית של Unix epoch לשעה מקומית. לדוגמה, בקיץ בלוס אנג'לס, המכשיר מחסר 7 שעות מהשעה הנוכחית לפי ראשית זמן יוניקס, ובחורף הוא מחסר 8 שעות.
כדי לתמוך בחישובים המקומיים האלו, לכל מכשירי Android יש בסיס נתונים של כל כללי אזור הזמן הגלובליים. למידע נוסף על כללים לאזורי זמן, ראו כללים לאזורי זמן.
כשמשתמש נוסע למיקום חדש שבו חל אזור זמן אחר, אין צורך לשנות את שעון Unix הנוכחי, אבל בדרך כלל המשתמש רוצה לראות את השעה המקומית ולא את השעה במיקום הקודם. שינוי אזור הזמן הנוכחי מבטיח שההיסט הנכון יחול על זמן יוניקס (Unix epoch) הנוכחי כדי להציג את הזמן המקומי הנכון של המיקום החדש.
AOSP מאפשר למשתמשים לקבוע באופן עצמאי אם השעה ואזור הזמן יוגדרו עבורם באופן אוטומטי באמצעות המנגנונים הבאים.
- זיהוי זמן אוטומטי: מוודאים שיש במכשיר את הזמן הנכון של נקודת הזמן הנוכחית של יוניקס (Unix epoch).
- זיהוי אוטומטי של אזור הזמן: מוודאים שאזור הזמן הנוכחי של המכשיר נכון.
זיהוי אוטומטי של זמן
בקטע הזה נספק סקירה כללית על השירות time_detector
שמנהל את זיהוי השעה האוטומטי, אמצעי הבקרה של המשתמשים, אפשרויות ההגדרה ופרטי הבדיקה.
שירות גלאי זמן
השירות time_detector
, שנמצא במכשירים עם Android מגרסה 10 ואילך, מנהל את זיהוי השעה האוטומטי. כשהתכונה 'זיהוי זמן אוטומטי' מופעלת, המערכת מתאימה את חותמת הזמן הנוכחית של המכשיר לפי מערכת Unix לפי הצורך.
השירות time_detector
תמיד נמצא באחד משני המצבים: לא בטוח או בטוח. המצב הוודאי או לא ודאי של השירות נקבע לפי הצעות זמן שהוא מקבל ממקורות שונים.
כשהשירות time_detector
בטוח, כלומר קיבל הצעה עם פרטי זמן תחילת המילניום של Unix, הוא מבטל את זמן תחילת המילניום הנוכחי של Unix אם הצעת הזמן שונה מזמן תחילת המילניום הנוכחי של Unix.
כשהערך של time_detector
לא בטוח, הוא לא משנה את השעה הנוכחית. בדרך כלל, המשמעות של מצב 'לא ודאי' היא שהשירות time_detector
לא קיבל הצעות לזמן. בנוסף, השירות time_detector
נעשה לא יציב אם ההצעות שהוא קיבל נחשבות ישנות מדי לשימוש. מובאים בחשבון גם גיל ההצעות כי התאמות שמבוססות על הצעות זמן ישנות של Unix epoch מסתמכות על השעון בזמן אמת במכשיר, שסביר להניח שהוא לא מדויק לאורך תקופות ארוכות.
כדי לקבוע באופן אוטומטי את זמן האפסון הנוכחי של Unix, למכשיר יש מקורות שונים שבהם הוא יכול להשתמש. הגורמים האלה נקראים מקורות במסמך הזה. בשירות time_detector
מתייחסים לרצפים של הצעות כאל רצפים ייחודיים בהתאם למקור שלהם.
השירות time_detector
כולל שמירת מצב, כלומר נשמר תיעוד של ההצעה האחרונה שהתקבלה מכל מקור. אם יש מקור עם מידע עדכני יותר על זמן תחילת המילניום ביוניקס, המערכת שולחת הצעות חדשות ל-time_detector
. השירות time_detector
בוחן מחדש הצעות חדשות וקיימות, ומעדכן את מצב המכשיר כשמתקבלות הצעות.
על אף שזמן UTC מוסכם באופן בינלאומי, יש סיבות שונות לכך שקביעת זמן ה-Unix epoch הנוכחית לא תמיד פשוטה למכשירי Android:
- שיטת יוניקס (Unix epoch) שונה מעט משעון UTC. כדי להמיר בין שני המצבים האלה צריך לדעת מתי מתרחשות שניות קפיציות ואיך המקור שלהן מטפל בהן.
- מקורות יכולים להיות זמינים רק בזמנים מסוימים או בנסיבות מסוימות. לדוגמה, אם המקור מחייב חיבור לרשת, יכול להיות שהוא יהיה זמין רק כשהמכשיר מחובר לאינטרנט.
- יכול להיות שהמקור לא מדויק או לא מדויק מספיק, או שיש בו שגיאות. לדוגמה, אם מגדל ספק הטלפוניה לא עוקב בצורה נכונה אחרי 'זמן אוניברסלי', יכול להיות שמקור הטלפוניה יציג הצעות זמן לא מדויקות.
- יכול להיות שיהיו אי-דיוקים בזמן קבלת חותמת הזמן של מערכת Unix. לדוגמה, עיכוב ברשת, אגירת נתונים או תזמון תהליכים עלולים לגרום לכך שזמן האפס של Unix לא יהיה מדויק.
- השעון של ההפניה שמשמש להתאמת ההצעה לזמן שחלף מאז קבלת ההצעה עשוי להיות לא מדויק.
יש שני מקורות עיקריים של זיהוי זמן שמוגדרים לשימוש כברירת מחדל ב-AOSP:
- רשת: נעשה שימוש בשרתי זמן של Network Time Protocol (NTP).
- טלפוניה: נעשה שימוש באותות טלפוניה של Network Identity ו-Time Zone (NITZ).
גם מקורות טלפוניה וגם מקורות רשתות דורשים קישוריות לרשתות חיצוניות, שלא תמיד זמינות.
החל מ-Android 12, מערכת Android תומכת גם במקורות הבאים, שלא מוגדרים לשימוש כברירת מחדל:
- GNSS: נעשה שימוש בספק המיקום של ה-GPS כדי לקבל זמן ממקור GNSS.
- חיצוני:מקור גנרי שמאפשר ליצרני מכשירים לשלב את המקור שלהם בשלב יוניקס (Unix epoch)
הגדרות הזמן
המשתמשים יכולים להפעיל זיהוי שעה אוטומטי דרך מערכת > תאריך ושעה באפליקציית ההגדרות של AOSP.
איור 1. זיהוי זמן אוטומטי בהגדרות.
בטבלה הבאה מתוארים אמצעי הבקרה למשתמשים לזיהוי הזמן באפליקציית ההגדרות של AOSP.
*ב-Android מגרסה 11 ומטה, ההגדרה הזו נקראת שימוש בשעון שמסופק על ידי הרשת |
|||
המיקום של הגדרות AOSP | השם של הגדרות AOSP | היקף | התנהגות |
---|---|---|---|
מערכת > תאריך ושעה | הגדרת הזמן באופן אוטומטי* | כל המשתמשים | מתג. כשהאפשרות מופעלת, המכשיר אחראי לזהות את נקודת הזמן הנוכחית של יוניקס (Unix epoch) כשהיא מושבתת, המשתמשים מקבלים אמצעי בקרה להגדרת השעה במכשיר באופן ידני. |
כשהמשתמש מזין את הזמן באופן ידני, הוא מזינים את הזמן המקומי, ולא את השעה הקודמת (epoch) של יוניקס (Unix epoch). הזמן הנוכחי של פרק הזמן של יוניקס (Unix epoch) מחושב באמצעות אזור הזמן הנוכחי כדי להסיק זמן של מערכת יוניקס (Unix epoch).
הגדרות אישיות
יצרני המכשירים יכולים להגדיר את השירות 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
, משתמשים בפקודה:
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"]
- האלגוריתם בטוח שהאזור הוא 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. |
תלוי בתצורת התכונה או ברכיבי הפלאגין. התשובה נכונה בדרך כלל משתנה לפי:
|
אפשרות לקבל עדכונים | זיהוי הטלפוניה מסתמך על קבצים שנכללים במודול 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
, משתמשים בפקודה:
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 מציין את אלגוריתם המיקום. |
המידע בהיסטוריית ההצעות מציין אילו הצעות נוצרו דרך ההגדרות (באופן ידני) ואילו הצעות נוצרו על ידי האלגוריתמים של הטלפון והמיקום.