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