位置時區偵測

位置時區偵測 (適用於 Android 12) 或更高版本是選用的自動時區偵測功能, 裝置可以使用所在位置和時區地圖資料來判斷時區。

位置時區偵測是電話時區的另一種機制 偵測。因為這是 功能不需電話通訊,而支援這項功能的裝置 除了行動裝置電話以外,還存在各種板型規格。

位置時區偵測功能包含下列元素: Android 開放原始碼計畫平台:

  • 系統伺服器中的時區偵測邏輯。
  • 使用者可透過「設定」中的選項,從 Android 12 可讓使用者在 電話與位置時區偵測機制。

  • 適用於執行位置偵測的元件的外掛系統 時區對應。外掛程式稱為位置時區供應商 (LTZP) 以及最多兩個。平台 會提供實作 LTZP 時必須使用的系統 API。

  • 參照 LTZP 實作。

  • 用於產生參照資料集的主機工具 OpenStreetMap 資料 可與參考實作搭配使用

使用者隱私

位置時區偵測功能提供下列使用者隱私功能:

  • 如果有可選取位置演算法的切換按鈕,使用者可以關閉 位置演算法。

  • 這樣一來,使用者就不會在 裝置。

  • 使用者可控制偵測時區的位置偵測作業 明確輸入「日期和時間」設定畫面。使用者沒有 透過權限對話方塊明確授予權限。

  • 裝置位置資訊不會傳送給 Android 平台服務。 會發生以下情況:

    • 時區偵測工具服務只會傳送時區 ID 也就是 LTZP,而不是裝置位置。這是所需的最低 API 支援位置時區偵測
    • 個別 LTZP 的運作是由系統整合商負責 導入 LTZP 時,可以使用保留的時區地圖資料 使用伺服器,或者採用 。

功能行為

time_zone_detector 服務會決定何時變更裝置目前的設定 採用偵測演算法的建議時區。

location_time_zone_manager 服務負責 提供 time_zone_detector 位置演算法的建議。 location_time_zone_manager 服務會在系統伺服器程序中執行。

location_time_zone_manager 服務未偵測到任何時區 邏輯。負責管理一或兩個外掛程式的生命週期 地點時區供應商 (LTZP)。

不需要偵測位置時區時,LTZP 就不會啟動。這個 這表示位置時區偵測系統不會要求 LTZP 追蹤 但裝置的所在位置。部分 可能原因如下:

  • 不同於 Google Analytics 中被動接收 一般電話作業,可主動要求位置資訊 Android 定位服務供應商,可能會耗用額外電力。
  • 位置資訊設定是以使用者為範圍,Android 必須遵循現行政策 使用者的設定
  • 取得裝置位置資訊會保護隱私。

此外,location_time_zone_manager 服務還會提出不確定的建議 (如果 (如要避免分享位置資訊) 並提供與使用者之間的資訊

因此,在切換 判斷演算法是否適用於目前位置,或是在切換目前的使用者之後 能偵測出時區這也取決於 LTZP 的實作

導入 Android 開放原始碼計畫的位置時區偵測功能最多可提供兩個 LTZP,一個 以及一個主要 LTZP,定義如下:

主要 LTZP
在使用者允許偵測位置時區時隨時執行 要執行哪些功能
次要 LTZP
如果主要 LTZP 回報時區不明,系統就會執行報表, 發生次數限製或逾時。如果主要執行個體,則會停止 LTZP 會提交「部分」建議。

如圖 1 所示,time_zone_detector 服務會收到時區 根據電話或位置演算法提供建議位置演算法 會從主要或次要 LTZP 接收建議。

位置時區偵測資訊流程

圖 1. 位置時區偵測資訊流程。

裝置設定需求

如要支援位置時區功能,必須將裝置設定為 LTZP 供裝置使用裝置至少需要一個 LTZP 才能啟用 而忽略位置偵測功能 管理。

裝置設定

本節說明裝置製造商如何設定裝置來支援這項功能 位置時區偵測。

基本 Android 開放原始碼計畫設定位於 frameworks/base/core/res/res/values/config.xml:

設定金鑰 Android 開放原始碼計畫值 說明
config_enableGeolocationTimeZoneDetection true 這是位置時區偵測功能的主要控制項。

Android 開放原始碼計畫預設支援這項功能。至少須有一個 LTZP 即可為使用者提供功能

如果將值設為 false,則會完全停用小型記憶體的功能 儲存中。
config_enablePrimaryLocationTimeZoneProvider false 這會啟用主要 LTZP。
config_primaryLocationTimeZoneProviderPackageName 設為主要供應商服務的應用程式套件名稱 可以找到需要的資訊。
config_enableSecondaryLocationTimeZoneProvider false 這會啟用次要 LTZP。
config_secondaryLocationTimeZoneProviderPackageName 將其設為次要提供者的應用程式套件名稱 就可以找到合適的服務

根據預設,Android 開放原始碼計畫的設定具有 config_enableGeolocationTimeZoneDetection 金鑰已設為「true」,即可啟用支援功能 以便偵測位置時區以下使用者無法查看這項功能 因為 Android 開放原始碼計畫預設不會包含 LTZP 設定。 不過,透過這項預設設定,裝置製造商即可啟用並 從指令列模擬 LTZP 以進行測試。(若需更多資訊,請參閱 偵錯和測試)。

LTZP 狀態 API

在 Android 14 中,LTZP API 支援 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)。只更新某個項目卻沒有更新 可能造成版本偏差若需更多資訊,請參閲 功能採用注意事項

Android 開放原始碼計畫參考資料 LTZP

Android 開放原始碼計畫會在 packages/modules/GeoTZ。 本參考實作項目會使用 Android 開放原始碼計畫 API 判斷裝置位置 ,並使用裝置端資料檔案將位置資訊對應到一組時區 ID。

其中包含從其他開放原始碼專案衍生的參照資料集: 原始碼詳情請參閱 README.md 和各種 LICENSE 檔案

偵錯及測試

下節說明用於偵錯及測試 位置時區偵測功能。

與 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 實作也能提供自己的偵錯或測試支援。 例如,你可以使用下列指令對 Android 開放原始碼計畫參考資料 LTZP 進行偵錯 當系統伺服器程序註冊該登錄資料時。

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService