זיהוי אזור הזמן של המיקום, שזמין ב-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 |
כך מפעילים את אזור הזמן הראשי. |
config_primaryLocationTimeZoneProviderPackageName |
מגדירים את זה לשם החבילה של האפליקציה שבה נמצא שירות הספק הראשי. | |
config_enableSecondaryLocationTimeZoneProvider |
false |
כך מפעילים את האזור המשני לניהול תעבורה. |
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 כשהיא רשומה בתהליך של שרת המערכת:
adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService