בדף הזה מוסבר איך פועל זיהוי הזמן ואזור הזמן ב-Android. המאמר כולל הסבר על האופן שבו Android מזהה באופן אוטומטי את השעה ואת אזורי הזמן, אפשרויות הגדרה ליצרני מכשירים ומידע על בדיקות.
סקירה כללית על זמן ואזורי זמן
כדי לקבוע את השעה המקומית של המשתמש לצורך הצגה במיקומים כמו סרגל הסטטוס, מערכת Android עוקבת אחרי שני מצבים קשורים אך בלתי תלויים:
- הזמן הנוכחי בפורמט 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. המצב של השירות, certain או uncertain, נקבע לפי הצעות לזמנים שהוא מקבל ממקורות שונים.
כשהשירות time_detector הוא certain, כלומר הוא קיבל הצעה עם פרטי זמן של ראשית זמן יוניקס (Unix epoch), הוא מחליף את הזמן הנוכחי של ראשית זמן יוניקס אם הצעת הזמן שונה מהזמן הנוכחי של ראשית זמן יוניקס.
אם time_detector הוא uncertain, הוא לא מבטל את השעה הנוכחית. המצב uncertain בדרך כלל מציין ששירות time_detector לא קיבל הצעות לזמנים. השירות time_detector הופך גם ל-uncertain אם ההצעות שהוא קיבל נחשבות ישנות מדי לשימוש. הגיל של ההצעות נלקח בחשבון כי התאמות שמבוססות על הצעות ישנות של זמן עידן יוניקס מסתמכות על השעון בזמן אמת שחלף במכשיר, שמונח שהוא לא מדויק לאורך תקופות ארוכות.
כדי לקבוע את הזמן הנוכחי של תקופת Unix באופן אוטומטי, למכשיר יש מקורות שונים שהוא יכול להשתמש בהם. במסמך הזה הם נקראים מקורות. שירות time_detector מתייחס לרצפים של הצעות כאל רצפים נפרדים על סמך המקור שלהם.
שירות time_detector הוא שירות עם מצב, כלומר הוא שומר תיעוד של ההצעה האחרונה שנוצרה על ידי כל מקור. הצעות חדשות מוצגות ב-time_detector אם יש מקור עם מידע עדכני יותר על זמן Unix epoch. שירות time_detector מעריך מחדש הצעות חדשות וקיימות ומעדכן את מצב המכשיר כשמתקבלות הצעות.
למרות שזמן UTC מוסכם בינלאומית, יש סיבות שונות לכך שלא תמיד קל לקבוע את זמן Unix epoch הנוכחי במכשיר מבוסס-Android:
- זמן ראשית יוניקס (Unix epoch) הוא מערכת למדידת זמן ששונה מעט מזמן UTC. כדי להמיר בין השניים, צריך לדעת מתי מתרחלות שניות מעוברות ואיך המקורות מטפלים בהן.
- יכול להיות שהמקורות יהיו זמינים רק בזמנים מסוימים או בנסיבות מסוימות. לדוגמה, אם המקור דורש קישוריות לרשת, יכול להיות שהוא יהיה זמין רק כשהמכשיר מחובר לאינטרנט.
- יכול להיות שהמקורות לא מדויקים או לא מפורטים, או שהם מכילים שגיאות. לדוגמה, אם מגדל תקשורת של טלפוניה לא עוקב אחרי זמן UTC בצורה נכונה, יכול להיות שהמקור של הטלפוניה יספק הצעות לא מדויקות לגבי השעה.
- יכול להיות שיהיו אי דיוקים בנתונים שמתקבלים כשמשיגים את חותמת הזמן של מערכת Unix. לדוגמה, עיכוב ברשת, אחסון בזיכרון או תזמון תהליכים עלולים לגרום לחוסר דיוק בזמן לפי ראשית זמן יוניקס.
- יכול להיות שהשעון הייחוס שמשמש להתאמת הצעה לזמן שחלף מאז שההצעה התקבלה לא מדויק.
ב-AOSP מוגדרות כברירת מחדל שתי שיטות עיקריות לזיהוי זמן:
- רשת: נעשה שימוש בשרתי זמן של Network Time Protocol (NTP).
- טלפוניה: שימוש באותות טלפוניה של זהות רשת ואזור זמן (NITZ).
גם מקורות טלפוניים וגם מקורות רשת דורשים קישוריות לרשתות חיצוניות, שלא תמיד זמינות.
החל מ-Android 12, Android תומך גם במקורות הבאים, שלא מוגדרים לשימוש כברירת מחדל:
- GNSS: המערכת משתמשת בספק המיקום GPS כדי לקבל זמן ממקור GNSS.
- חיצוני: מקור כללי שמאפשר ליצרני מכשירים לשלב מקור משלהם של זמן יוניקס.
הגדרות השעה
משתמשים יכולים להפעיל זיהוי אוטומטי של השעה במערכת > תאריך ושעה באפליקציית ההגדרות של AOSP.
איור 1. זיהוי אוטומטי של השעה בהגדרות.
הטבלה הבאה מתארת את אמצעי הבקרה למשתמשים לזיהוי זמן באפליקציית ההגדרות של AOSP.
|
*ב-Android מגרסה 11 ומטה, ההגדרה הזו נקראת שימוש בזמן שמסופק על ידי הרשת. |
|||
| המיקום של ההגדרות ב-AOSP | השם של ההגדרות ב-AOSP | היקף | התנהגות |
|---|---|---|---|
| מערכת > תאריך ושעה | הגדרת זמן באופן אוטומטי* | כל המשתמשים | מתג. כשהאפשרות מופעלת, המכשיר אחראי לזיהוי הזמן הנוכחי של תקופת Unix. כשההגדרה מושבתת, המשתמשים יכולים להגדיר את השעה במכשיר באופן ידני. |
כשהמשתמש מזין את השעה באופן ידני, הוא מזין את השעה המקומית ולא את השעה של תקופת Unix. הזמן הנוכחי מאז ראשית זמן יוניקס מחושב לפי אזור הזמן הנוכחי כדי לקבל את הזמן מאז ראשית זמן יוניקס.
הגדרות אישיות
יצרני מכשירים יכולים להגדיר את שירות 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 לא מאמת הצעות לזמן יוניקס אפוק שמגיעות.
ניפוי באגים ובדיקות שקשורים לזמן
בקטע הזה מוסבר איך לנפות באגים ולבדוק את ההתנהגות של שירות 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 נמצא במצב certain, המשמעות היא שהשירות time_zone_detector קיבל מידע מדויק על אזור הזמן, ולכן הוא יכול לבטל את אזור הזמן הנוכחי. אם הערך הוא uncertain, המשמעות היא שלא התקבל מידע או שהתקבל מידע ברמת מהימנות נמוכה, ולכן אזור הזמן הנוכחי לא ישתנה.
מצבים מסוימים של שירות time_zone_detector יכולים לכלול מצבים שבהם ל-time_zone_detector אין מידע על אזור זמן לשימוש, או שיש לו כמה אזורי זמן לבחירה. המדינות האלה הן:
- מצב
certainעם אפס אזורי זמן מוצג כשהמכשיר נמצא במקום ללא אזור זמן, למשל במים בינלאומיים או באזור שנוי במחלוקת. המצב הזה דומה למצב לא ודאי, אבל הוא מציין ש-time_zone_detectorלא צריך לבצע פעולות נוספות כדי לנסות לקבוע את אזור הזמן. - מזינים
certainמדינה עם כמה אזורי זמן במקרים של דו-משמעות או תנאי גבול. במצב הזה, אם אזור הזמן הנוכחי הוא אחד מאזורי הזמן ש-time_zone_detectorבטוח לגביהם, אזור הזמן הנוכחי נשאר כמו שהוא. אחרת, נעשה שימוש באחד מאזורי הזמן הזמינים. כךtime_zone_detectorנשמר גם אם המשתמש בחר ידנית את אזור הזמן שלו בעבר, או אם המכשיר מתקרב לגבול.
המצב של שירות time_zone_detector או certain נקבע לפי הצעות לאזור זמן שנשלחות על ידי אלגוריתם.uncertain
בדרך כלל, ההצעות מגיעות בשני סוגים שתואמים מאוד למצבים האפשריים של 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 הוא שירות עם מצב, כלומר הוא שומר תיעוד של ההצעה האחרונה שניתנה על ידי כל אלגוריתם. הצעות חדשות נשלחות לשירות 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.
איור 2. זיהוי אוטומטי של אזור הזמן בהגדרות.
בטבלה הבאה מפורטים אמצעי הבקרה למשתמשים לזיהוי אזור הזמן באפליקציית ההגדרות של AOSP.
|
*ב-Android מגרסה 11 ומטה, ההגדרה הזו נקראת לפי אזור הזמן שמספקת הרשת. |
|||
| המיקום של ההגדרות ב-AOSP | השם של ההגדרות ב-AOSP | היקף | התנהגות |
|---|---|---|---|
| מערכת > תאריך ושעה | הגדרת אזור הזמן באופן אוטומטי* | כל המשתמשים | מתג. אם המדיניות מופעלת, המכשיר אחראי לזיהוי אזור הזמן הנוכחי. כשההגדרה מושבתת, המשתמשים יכולים להגדיר את אזור הזמן של המכשיר באופן ידני. |
| מערכת > תאריך ושעה | שימוש במיקום כדי להגדיר את אזור הזמן | משתמש נוכחי | מתג. זמין מ-Android 12. המתג הזה מוצג רק אם המכשיר תומך בזיהוי אזור הזמן של המיקום. למידע על שינויים שנוספו ב-Android 14, אפשר לעיין במאמר בנושא מכשירים שתומכים רק בזיהוי אזור זמן לפי מיקום. |
| מיקום | שימוש במיקום | משתמש נוכחי | מתג. מאפשר או מונע שימוש במיקום המכשיר באופן כללי. הערך רלוונטי אם יש במכשיר תמיכה בזיהוי אזור הזמן של המיקום. |
בהמשך מופיעה סקירה כללית של התנהגות המכשיר לגבי זיהוי אזור זמן בהתאם להגדרות שנבחרו על ידי המשתמש:
- [Date and Time] Set time zone automatically: OFF
- המשתמש צריך לבחור את אזור הזמן באופן ידני.
- [Date and Time] Set time zone automatically: ON
- [Location] Use location: OFF
- אותות טלפוניה משמשים לזיהוי אזור הזמן.
- [מיקום] שימוש במיקום: מופעל
- [Date and Time] Use location to set time zone: ON
- המיקום משמש לזיהוי אזור הזמן.
- [Date and Time] Use location to set time zone: OFF
- אותות טלפוניה משמשים לזיהוי אזור הזמן.
- [Date and Time] Use location to set time zone: ON
- [Location] Use location: OFF
מכשירים של ריבוי משתמשים
חלק מההגדרות שקשורות לזיהוי אזור הזמן מוגדרות בהיקף המשתמש הנוכחי, ולכן ההתנהגות של זיהוי אזור הזמן במכשיר יכולה להשתנות כשהמשתמש הנוכחי משתנה במכשיר Android עם משתמשים מרובים.
המתג שימוש במיקום כדי להגדיר את אזור הזמן מוגדר בהתאם למשתמש הנוכחי ולא מוגבל על ידי מדיניות המכשיר. כלומר, המשתמשים תמיד יכולים לשנות את הערך שלו, גם אם המתג הגדרת אזור הזמן באופן אוטומטי מושבת או אם אמצעי בקרה אחרים של השעה או אזור הזמן מוגבלים על ידי בקר מדיניות המכשיר.
מכשירים שתומכים רק באלגוריתם לזיהוי אזור הזמן של המיקום
בקטע הזה מתואר אופן הפעולה של מכשירים שתומכים רק באלגוריתם של המיקום.
Android מגרסה 14 ואילך
- האפשרות שימוש במיקום לא מוצגת למשתמשים באפליקציית ההגדרות של AOSP, והמכשיר מתנהג כאילו האפשרות שימוש במיקום מופעלת.
- המערכת מתעלמת מהערך של ההגדרה
SettingsProviderlocation_time_zone_detection_enabledברמת המשתמש. הערך הזה מתעד את ההעדפה של המשתמש בסוגים אחרים של מכשירים.
Android מגרסה 12 או מגרסה 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 שאפשר להשתמש בהם כדי להשפיע על ההתנהגות של השירות time_zone_detector לצורך בדיקות או בייצור. פרטים נוספים זמינים במאמר הגדרת מכשיר באמצעות השירות device_config.
כדי לבדוק את זיהוי אזור הזמן, הבודקים צריכים לדעת באיזה אלגוריתם משתמשת time_zone_detector. כדי להבין את האלגוריתם הנוכחי של time_zone_detector ולהשפיע עליו, אפשר להשתמש באחת מהאפשרויות הבאות:
- בודקים באופן חזותי דרך ממשק המשתמש של ההגדרות. מידע נוסף זמין במאמר בנושא הגדרות אזור זמן.
משתמשים בשורת הפקודה דרך adb:
- כדי ליצור dump של המצב של
time_zone_detector, משתמשים ב-adb shell cmd time_zone_detector dump - כדי לשנות את הגדרות המכשיר, משתמשים בפקודות אחרות של
time_zone_detector. מידע נוסף זמין בכתובתadb shell cmd time_zone_detector help.
- כדי ליצור dump של המצב של
הדוגמה הבאה מציגה את הפלט של הפקודה 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 מציין את אלגוריתם המיקום. |
המידע בהיסטוריית ההצעות מציין אילו הצעות נוצרו דרך ההגדרות (ידנית), ואילו נוצרו על ידי האלגוריתמים של הטלפוניה והמיקום.