位置時區偵測功能適用於 Android 12 以上版本,這項選用的自動時區偵測功能可讓裝置使用所在位置和時區地圖資料判斷時區。
位置時區偵測是電信時區偵測的替代機制。這項功能不需要電話功能,因此除了行動電話裝置外,各種板型規格的裝置都能支援這項功能。
位置時區偵測功能在 AOSP 平台中包含下列元件:
- 系統伺服器中的時區偵測邏輯
Android 12 推出的「設定」選項,使用者可透過這個選項在電話和位置資訊時區偵測機制之間切換
這個外掛程式系統適用於執行位置偵測和時區對應的元件。這項外掛程式稱為「位置時區資訊供應器」(LTZP),裝置最多可安裝兩個。平台提供系統 API,必須使用這些 API 實作 LTZP。
LTZP 參考實作。
主機工具,可從 Open Street Map (OSM) 資料產生參照資料集,供參照實作使用。
使用者隱私
位置時區偵測包含下列使用者隱私權功能:
如果畫面顯示可選取位置演算法的切換按鈕,使用者隨時可以關閉位置演算法。
裝置上的使用者不會共用系統根據位置資訊建議的時區。
使用者可以透過「日期和時間」設定畫面,明確控管時區偵測的位置偵測功能。使用者不必透過權限對話方塊明確授予權限。
裝置位置資訊不會傳遞至 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 提交特定建議,就會停止。
如圖 1 所示,time_zone_detector
服務會收到電話或位置演算法提供的時區建議。位置演算法會接收主要或次要 LTZP 的建議。
圖 1. 位置時區偵測資訊流程。
裝置設定需求
如要支援位置時區功能,裝置必須設定裝置可用的 LTZP。裝置必須啟用並設定至少一個 LTZP,才能偵測位置時區,並在「設定」中向使用者顯示。
裝置設定
本節說明裝置製造商如何設定裝置,以支援位置時區偵測功能。
基本 AOSP 設定位於
frameworks/base/core/res/res/values/config.xml
:
設定金鑰 | Android 開放原始碼計畫值 | 說明 |
---|---|---|
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,以進行測試。(詳情請參閱「偵錯及測試」)
LTZP 狀態 API
在 Android 14 中,LTZP 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 使用的地理位置資料與時區資料模組 (com.android.tzdata
) 中時區規則 (tzdb) 之間的互動。如果只更新其中一個,很可能會導致版本差異問題。詳情請參閱「功能採用注意事項」。
Android 開放原始碼計畫參考資料 LTZP
Android 開放原始碼計畫 (AOSP) 在 packages/modules/GeoTZ
下提供 LTZP 參考實作。這個參考實作項目會使用 AOSP API 判斷裝置位置,並使用裝置端資料檔案將位置對應至一組時區 ID。
原始碼隨附衍生自其他開放原始碼專案的參照資料集。詳情請參閱 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