位置時區偵測 (適用於 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