זיהוי אזור הזמן של המיקום, שזמין ב-Android מגרסה 12 ואילך, הוא תכונה אופציונלית של זיהוי אוטומטי של אזור הזמן. התכונה מאפשרת למכשירים להשתמש במיקום ובנתוני מפת אזורי הזמן כדי לקבוע את אזור הזמן.
זיהוי אזור הזמן של המיקום הוא מנגנון חלופי לזיהוי אזור הזמן של הטלפוניה. התכונה הזו לא דורשת טלפוניה, ולכן היא יכולה להיות נתמכת במכשירים עם גורמי צורה שונים, בנוסף למכשירים עם טלפוניה ניידת.
התכונה 'זיהוי אזור הזמן של המיקום' מורכבת מהרכיבים הבאים בפלטפורמת AOSP:
- לוגיקה של זיהוי אזור הזמן בשרת המערכת
אפשרות נגישה למשתמש בהגדרות, שהוצגה ב-Android 12, שמאפשרת למשתמשים לבחור בין מנגנוני זיהוי אזור הזמן של הטלפוניה והמיקום
מערכת פלאגין לרכיבים שמבצעים את זיהוי המיקום ומיפוי אזור הזמן. התוסף נקרא Location Time Zone Provider (ספק אזור זמן לפי מיקום, LTZP) ויכולים להיות עד שניים כאלה במכשיר. הפלטפורמה מספקת ממשקי API של המערכת שחובה להשתמש בהם כדי להטמיע LTZP.
הטמעה של LTZP לדוגמה.
אירוח כלי ליצירת מערך נתונים להשוואה מנתונים של Open Street Map (OSM) שאפשר להשתמש בו עם יישום ההפניה.
פרטיות המשתמשים
זיהוי אזור הזמן של המיקום כולל את התכונות הבאות לשמירה על פרטיות המשתמשים:
אם יש מתג לבחירת אלגוריתם המיקום, המשתמשים יכולים להשבית את אלגוריתם המיקום בכל שלב.
הצעות לאזור זמן שנגזרות מהמיקום לא משותפות בין משתמשים במכשיר.
המשתמשים יכולים לשלוט באופן מפורש על זיהוי המיקום לצורך זיהוי אזור הזמן במסך ההגדרות תאריך ושעה. המשתמשים לא צריכים להעניק הרשאה באופן מפורש דרך תיבת דו-שיח של הרשאות.
פרטי המיקום של המכשיר לא מועברים לשירותי הפלטפורמה של Android. במקום זאת, יקרה אחד מהדברים הבאים:
- שירותי זיהוי אזור הזמן מקבלים מ-LTZP מזהים של אזורי זמן, ולא את המיקום של המכשיר. זה ה-API המינימלי שנדרש כדי לתמוך בזיהוי אזור הזמן של המיקום.
- משלבי מערכות שולטים בפעולה של אזורי זמן מקומיים ספציפיים. הטמעות של LTZP יכולות להשתמש בנתוני מפת אזורי זמן שמאוחסנים במלואם במכשיר Android, להשתמש בשרתים או להשתמש בגישה היברידית.
התנהגות התכונה
שירות time_zone_detector
קובע מתי לשנות את אזור הזמן הנוכחי של המכשיר על סמך הצעות שהוא מקבל מאלגוריתמים לזיהוי.
שירות location_time_zone_manager
אחראי ליצירת הצעות לאלגוריתם המיקום של time_zone_detector
. שירות location_time_zone_manager
פועל בתהליך של שרת המערכת.
השירות location_time_zone_manager
לא מכיל לוגיקה לזיהוי אזור זמן. השירות הזה אחראי לניהול מחזור החיים של תוסף LTZP אחד או שניים.
אם אין צורך בזיהוי אזור הזמן של המיקום, תהליכי LTZP לא מופעלים. המשמעות היא שמערכת זיהוי אזור הזמן של המיקום לא מבקשת מספקי LTZP לעקוב אחרי מיקום המכשיר, אלא אם יש צורך מפורש בכך. אלה כמה מהסיבות להתנהגות הזו:
- בניגוד לאותות טלפוניה שמתקבלים באופן פסיבי כחלק מפעולות טלפוניה רגילות, אפשר לבקש מיקום באופן פעיל מספקי מיקום ב-Android, והפעולה הזו עלולה לצרוך יותר חשמל.
- הגדרות המיקום הן ברמת המשתמש, ומערכת Android חייבת לכבד את ההגדרות הנוכחיות של המשתמש.
- השגת המיקום של המכשיר היא פעולה שקשורה לפרטיות.
בנוסף, שירות location_time_zone_manager
מציע הצעה לא ודאית (אם צריך) כשהמשתמש הנוכחי משנה את ההגדרות כדי למנוע שיתוף של פרטי מיקום בין משתמשים.
כתוצאה מהבחירות האלה, לוקח כמה שניות אחרי מעבר מהאלגוריתם הנוכחי למיקום, או אחרי מעבר מהמשתמש הנוכחי, עד שאפשר לזהות את אזור הזמן. ההתנהגות הזו תלויה גם בהטמעות של כללי ה-LTZP שבהם נעשה שימוש.
ההטמעה של זיהוי אזור הזמן של המיקום ב-AOSP מאפשרת שימוש בעד שני ספקי LTZP, ספק ראשי וספק משני, כפי שמוגדר כאן:
- primary LTZP
- פועל כל הזמן אם המשתמש אישר את הפעלת התכונה לזיהוי אזור הזמן.
- secondary LTZP
- הפונקציה מופעלת אם הדוח הראשי של LTZP מציין שאזור הזמן לא ודאי, אם הוא מציין כשל קבוע או אם חלף הזמן הקצוב במהלך האתחול. ההצעה תיפסק אם ספק ה-LTZP הראשי ישלח הצעה מסוימת.
כפי שמוצג באיור 1, שירות time_zone_detector
מקבל הצעות לאזורי זמן מאלגוריתם הטלפוניה או המיקום. אלגוריתם המיקום מקבל הצעות מאזור הזמן הראשי או המשני.
איור 1. זרימת המידע של זיהוי אזור הזמן של המיקום.
דרישות להגדרת המכשיר
כדי לתמוך בתכונה של אזור זמן לפי מיקום, צריך להגדיר במכשירים LTZP שהמכשיר יכול להשתמש בהם. כדי שהתכונה 'זיהוי אזור זמן לפי מיקום' תפעל ותהיה גלויה למשתמשים בהגדרות, צריך להפעיל ולהגדיר לפחות LTZP אחד במכשירים.
תצורת מכשיר
בקטע הזה מוסבר איך יצרני מכשירים יכולים להגדיר מכשירים כך שיתמכו בזיהוי אזור זמן לפי מיקום.
ההגדרה הבסיסית של AOSP נמצאת בכתובת
frameworks/base/core/res/res/values/config.xml
:
מפתח הגדרה | ערך AOSP | תיאור |
---|---|---|
config_enableGeolocationTimeZoneDetection |
true |
זהו אמצעי הבקרה הראשי של התכונה 'זיהוי אזור הזמן של המיקום'.
התכונה נתמכת כברירת מחדל ב-AOSP. כדי שהתכונה תהיה זמינה למשתמשים, צריך להפעיל או להגדיר לפחות אזור זמן מקומי. הגדרת הערך ל- false משביתה את התכונה לגמרי כדי לחסוך קצת בזיכרון. |
config_enablePrimaryLocationTimeZoneProvider |
false |
כך מפעילים את ה-LTZP הראשי. |
config_primaryLocationTimeZoneProviderPackageName |
מגדירים את זה לשם החבילה של האפליקציה שבה נמצא שירות הספק הראשי. | |
config_enableSecondaryLocationTimeZoneProvider |
false |
כך מופעלת LTZP משנית. |
config_secondaryLocationTimeZoneProviderPackageName |
מגדירים את שם החבילה של האפליקציה שבה אפשר למצוא את שירות הספק המשני. |
כברירת מחדל, ההגדרה של המפתח config_enableGeolocationTimeZoneDetection
ב-AOSP היא true
, וכך מופעלת התמיכה בתכונה 'זיהוי אזור הזמן של המיקום'. התכונה לא גלויה למשתמשים בהתחלה כי AOSP לא כולל הגדרת LTZP כברירת מחדל.
עם זאת, באמצעות הגדרת ברירת המחדל הזו, יצרני מכשירים יכולים להפעיל ולדמות LTZP משורת הפקודה לצורך בדיקה. (מידע נוסף זמין במאמר בנושא ניפוי באגים ובדיקה)
ממשקי API של סטטוס LTZP
ב-Android 14, ממשקי ה-API של LTZP תומכים במידע על סטטוס הדיווח של LTZP. ההגדרה הזו מאפשרת ל-LTZP לדווח על בעיות שהפלטפורמה לא יכולה לזהות בעצמה, כי רכיבי זיהוי אזור הזמן של הפלטפורמה לא מעורבים ישירות בזיהוי המיקום או אזור הזמן באלגוריתם המיקום.
האפשרות לדווח על כך שההתנהגות של LTZP נפגעה בגלל הסביבה של המכשיר שימושית כשיש תמיכה במצב גיבוי של טלפוניה. לדוגמה, אם ספק LTZP מצד שלישי שמסתמך על הגדרות או הרשאות מותאמות אישית כדי שהאפליקציה שלו לזיהוי מיקום תפעל, פועל במצב מוגבל או מושבת על ידי ההגדרות הנוכחיות של המכשיר, ספק ה-LTZP יכול לדווח על פרטי הסטטוס האלה לרכיבי פלטפורמה פנימיים כמו אפליקציית ההגדרות באמצעות השיטה reportSuggestion
. אפליקציית ההגדרות יכולה להודיע למשתמשים באמצעות מחרוזות שניתנות להתאמה אישית או התאמות אישיות, שיש הגדרות שצריך לשנות כדי שהאלגוריתם לחישוב המיקום יפעל בצורה טובה או בכלל.
מידע נוסף על הסטטוסים ש-LTZP יכול לדווח עליהם זמין במאמר TimeZoneProviderStatus
.
הגדרה ופריסה של LTZP
כשמגדירים LTZP, כדאי לקרוא את ההוראות בקוד המקור של frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java
.
הערות ה-Javadoc מספקות פרטים על השירות, על ההרשאות הנדרשות ועל הגדרות אחרות.
כדי להגדיר LTZP, יצרני מכשירים צריכים לבחור תהליך של אפליקציה לאירוח השירות של ה-LTZP. הקצאת תהליך ייעודי ל-LTZP יוצרת תקורה גבוהה. מומלץ לבחור תהליך של אפליקציה שפועל כל הזמן, כמו שרת המערכת.
במכשירים עם רכיבי מערכת מודולריים (מודולים), כדאי לשים לב לאינטראקציה בין הנתונים הגיאוגרפיים שמשמשים את LTZP לבין כללי אזור הזמן (tzdb) שמועברים במודול נתוני אזור הזמן (com.android.tzdata
). עדכונים של אחד מהם ללא עדכונים של השני עלולים לגרום לבעיות של הטיה בגרסה. מידע נוסף זמין במאמר בנושא שיקולים לגבי אימוץ תכונות.
הפניה ל-LTZP ב-AOSP
AOSP מכיל הטמעה לדוגמה של LTZP בכתובת packages/modules/GeoTZ
. הטמעה לדוגמה הזו משתמשת בממשקי API של AOSP כדי לקבוע את מיקום המכשיר, ובקובץ נתונים במכשיר כדי למפות את המיקום לקבוצה של מזהי אזורי זמן.
קבוצת נתוני הפניה שמקורה בפרויקטים אחרים בקוד פתוח כלולה בקוד המקור. פרטים נוספים זמינים בקובץ README.md ובקובצי הרישיון השונים.
ניפוי באגים ובדיקה
בקטע הבא מתוארות פקודות shell לניפוי באגים ולבדיקה של התכונה 'זיהוי אזור הזמן של המיקום'.
אינטראקציה עם השירות location_time_zone_manager
אם אלגוריתם המיקום נתמך במכשיר עם Android מגרסה 12 ואילך, מערכת Android יוצרת מופע של שירות location_time_zone_manager
בזמן האתחול.
כדי ליצור dump של המצב הנוכחי של location_time_zone_manager
, משתמשים בפקודה:
adb shell cmd location_time_zone_manager dump
כדי לראות קבוצה גדולה של אפשרויות בשורת הפקודה שיכולות לעזור בבדיקה, משתמשים בפקודה:
adb shell cmd location_time_zone_manager help
בפלט של העזרה מפורטים גם מאפייני השירות device_config
שאפשר להשתמש בהם כדי להשפיע על ההתנהגות של time_zone_detector
לצורך בדיקה או בייצור. מידע נוסף זמין במאמר הגדרת מכשיר באמצעות שירות device_config.
הטמעות של LTZP יכולות לספק תמיכה משלהן בניפוי באגים או בבדיקות. לדוגמה, אפשר להשתמש בפקודה הבאה כדי לנפות באגים ב-LTZP של AOSP reference כשהוא רשום בתהליך של שרת המערכת:
adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService