位置時區檢測

位置時區檢測在 Android 12 或更高版本上可用,是一項可選的自動時區檢測功能,允許設備使用其位置和時區地圖數據來確定時區。

位置時區的檢測是一種替代機制,以電話的時區檢測。由於此功能不需要電話,因此除移動電話設備外,各種外形規格的設備都可以支持此功能。

位置時區檢測功能由 AOSP 平台中的以下組件組成:

  • 系統服務器中的時區檢測邏輯。
  • Android 12 中引入的“設置”中用戶可訪問的選項,使用戶能夠在電話和位置時區檢測機制之間進行選擇。
  • 用於執行位置檢測和時區映射的組件的插件系統。一個插件叫做定位時區供應商(LTZP),並可以有多達兩個他們的設備上。
  • 參考 LTZP 實現。
  • 主機工具來生成從基準數據集合OpenStreetMap的數據可以與參考實現一起使用。

用戶隱私

位置時區檢測包括以下用戶隱私功能:

  • 用戶可以隨時關閉位置時區檢測。
  • 設備上的用戶之間不會共享基於位置的時區建議。
  • 用戶可以通過明確的日期和時間設置屏幕控制位置的時區檢測的檢測。用戶不必通過權限對話框明確授予權限。
  • 設備位置信息不會傳遞到 Android 平台服務。會發生以下情況:

    • 時區檢測器服務僅由 LTZP 發送時區 ID,而不是設備的位置。這是支持位置時區檢測所需的最小 API。
    • 各個 LTZP 的操作由系統集成商決定。 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,一個主 LTZP 和一個輔助 LTZP,定義如下:

初級LTZP
在用戶允許位置時區檢測功能運行時始終運行。
二級LTZP
如果運行的主要LTZP報告的時區是不確定的,報告永久性故障,或超時初始化過程中。如果停止主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這將啟用主 LTZP。
config_primaryLocationTimeZoneProviderPackageName將此設置為可以找到主要提供者服務的應用程序的包名稱。
config_enableSecondaryLocationTimeZoneProvider false這將啟用輔助 LTZP。
config_secondaryLocationTimeZoneProviderPackageName將此設置為可以找到二級提供程序服務的應用程序的包名稱。

默認情況下,AOSP配置具有config_enableGeolocationTimeZoneDetection鍵設置為true的位置時區的檢測功能,讓支持。該功能最初對用戶不可見,因為 AOSP 默認不包含 LTZP 配置。但是,使用此默認配置,設備製造商可以從命令行啟用和模擬 LTZP 以進行測試。 (欲了解更多信息,請參見調試和測試。)

Location Time Zone Provider 配置和部署

當配置LTZP,讀取在源代碼中的指令frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java 。 Javadoc 註釋提供了有關服務、所需權限和其他配置的詳細信息。

要配置位置時區提供程序,設備製造商必須選擇一個應用進程來託管 LTZP 的服務。為 LTZP 設置專用進程是一項高開銷;理想情況下,選擇的應用程序進程是一個始終運行的應用程序進程,例如係統服務器。

上的設備進行模塊化系統組件(模塊),可以考慮通過在攜帶的LTZP和時區規則(TZDB)中使用的地理數據之間的相互作用時區數據模塊com.android.tzdata )。更新一個而不更新另一個可能會導致版本偏差問題。欲了解更多信息,請參閱功能採用的考慮

AOSP 參考位置時區提供程序

AOSP包含下一個參考位置時區Provider實現packages/modules/GeoTZ 。此參考實現使用 AOSP API 來確定設備的位置,並使用設備上的數據文件將該位置映射到一組時區 ID。

源代碼中包含源自其他開源項目的參考數據集。有關詳細信息,請參閱README.md和各種許可文件。

調試和測試

以下部分介紹用於調試和測試位置時區檢測功能的 shell 命令。

與 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