自動偵測時間會從不同來源接收建議時間,選擇 然後將 Android 系統時鐘設為相符。提供先前的 Android 版本 兩種方法設定日期和時間:依使用者手動設定或自動偵測時間,以及 執行下列任一操作:
telephony
會使用網路身分和時區 (NITZ) 電話信號。network
使用網路時間通訊協定 (NTP) 時間伺服器。
每個選項都需要連線到外部網路,但 Android 不一定支援這項功能 Automotive。舉例來說,在某些國家/地區,某些車款可能沒有內建電話服務。因此 全球衛星導航系統 (GNSS) 時間是系統來源 讓您未使用網路連線
即將推出的 Android 版本還多了兩個選項,可自動偵測及設定時間:
啟用自動偵測時間功能
如要啟用自動偵測時間功能,請務必依序選取「設定」> 日期與時間 >自動設定日期與時間:
圖 1. 選取「自動設定日期」和時間
設定時間來源
指定要納入自動偵測時間的來源和優先順序
請將這些時間來源納入考量,您必須修改裝置的資源
設定檔,core/res/res/values/config.xml
:
<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list take precedence over lower ones. See com.android.server.timedetector.TimeDetectorStrategy for available sources. --> <string-array name="config_autoTimeSourcesPriority"> <item>telephony</item> <item>network</item> </string-array>
這個範例會將 telephony
和 network
納入考量
依照自動偵測時間和 telephony
時間建議
在建議 network
次的時間之前。
一般來說,如果建議,系統會忽略優先順序較高的來源提供的建議 無效或建議時間太舊。此外,如果優先順序最高的有效建議 比對裝置目前的系統時鐘時間到幾秒內 (預設值) 大小為 2 (2) 秒,則時間不會變更。
下限
Android 12 提供全新的短時差, 正在驗證建議時間在此之前,自動偵測時間不會驗證 建議的傳入時間 (世界標準時間)有了這項功能 在下限之前經過的時間 被捨棄。
下限值取決於建構時間戳記的日期。這張投影片 原則上,在建構系統映像檔之前不能超過有效時間。Android 不支援 執行上限
GNSS 時間建議
gnss
時間來源是 Android 12 的全新時間,由 GPS 信號提供。這是
確保 telephony
和 network
無法使用時,都會有可靠的資料來源。
這個選項會新增至以下位置的新 GnssTimeUpdateService
:
被動監聽位置更新的系統伺服器。收到有效的位置後,
GnssTimeUpdateService
會向 TimeDetectorService
提供建議;
就會決定是否應更新系統時鐘。
根據預設,Android 開放原始碼計畫並未啟用 gnss
時間來源,因此
必須由合作夥伴啟用:
<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list take precedence over lower ones. See com.android.server.timedetector.TimeDetectorStrategy for available sources. --> <string-array name="config_autoTimeSourcesPriority"> <item>telephony</item> <item>network</item> <item>gnss</item> </string-array> <!-- Enables the GnssTimeUpdate service. This is the global switch for enabling Gnss time based suggestions to TimeDetector service. See also config_autoTimeSourcesPriority. --> <bool name="config_enableGnssTimeUpdateService">true</bool>
如要啟用這項功能,請按照下列步驟操作:
- 更新「
config_enableGnssTimeUpdateService
」。請注意, 「config_enableGnssTimeUpdateService
」必須設為「true
」。 - 更新「
config_autoTimeSourcesPriority
」。必須將gnss
新增至 「config_autoTimeSourcesPriority
」的項目清單。gnss
的位置 會決定對 GNSS 建議所指定的優先順序 從其他來源收集的資料
對電源的影響
GnssTimeUpdateService
會監聽位置更新,這表示
一律不主動開啟 GPS 以消耗額外電力。因此,當在任何情況下
啟用 GNSS 來源後,只能忽略微失情況。也就是說,除非
系統主動要求位置更新通知,GnssTimeUpdateService
不會取得位置資訊
更新並提供 GNSS 時間建議
測試
相容性測試套件 (CTS)
系統會提供 CTS 測試,用來驗證 GNSS 提供的時間是否有空。詳情請參閱
LocationShellCommand.java
。
單元測試
請參閱下列檔案的基本單元測試:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
手動測試
為了測試這項功能,我們在
LocationShellCommand.java
。使用這些指令來新增測試
指定位置和相關 GNSS 時間。
GnssTimeUpdateService
會定期聆聽這些位置更新通知
提出建議。
注意:這些指令的介面可能會在不同版本之間變更。
# Enable Master Location Switch in the foreground user (usually user 10 on automotive). # If you just flashed, this can be done through Setup Wizard. adb shell cmd location set-location-enabled true --user 10 # Add GPS test provider (this usually fails the first time and will throw a SecurityException # with "android from <some-uid> not allowed to perform MOCK_LOCATION".) adb shell cmd location providers add-test-provider gps # Enable mock location permissions for previous UID adb shell appops set <uid printed in previous error> android:mock_location allow # Add GPS test provider (Should work with no errors.) adb shell cmd location providers add-test-provider gps # Enable GPS test provider adb shell cmd location providers set-test-provider-enabled gps true # Set location with time (time can't be earlier than the limit set by the lower bound.) adb shell cmd location providers set-test-provider-location gps --location <LATITUDE>,<LONGITUDE> --time <TIME>
外部時間建議
外部時間建議是另一種提供自動時間建議的方式。 Android。這個新選項可讓您完全自訂 Android、 源自各種 ECU 的 ECU,可依需求使用即時時鐘、 GNSS、NITZ 或任何其他時間來源。
下列 Android 12 提供建議可視為 external
建議時間:
- VHAL 屬性:新的
VHAL 屬性
提供了名為
EPOCH_TIME
的映像檔。這個屬性代表 自 1970 年 1 月 1 日 (世界標準時間) 起經過的毫秒數。其值可以傳遞至 AndroidTimeManager
可建議新的系統時間。VHAL 範例 更新這個屬性的實作方式,是透過 參照導入 。 - 系統 API:名為
suggestExternalTime()
的新方法 是 TimeManager,針對系統提供外部時間建議。 如果系統設定將外部時間建議納入考量 (使用config_autoTimeSourcesPriority
),時間戳記 傳遞至這個方法用來設定系統時間 (「如果」沒有延遲時間值) 有優先時間建議。
您可以按照下列說明實作外部時間解決方案:
- 更新資源設定檔 (
core/res/res/values/config.xml
) 然後將external
值新增至config_autoTimeSourcesPriority
:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>
這樣就能指示 Android 在設定外部時間建議時,將建議的優先順序設為最高 系統時鐘。車輛上的硬體會將時間戳記建議寫入新的
EPOCH_TIME
VHAL 屬性。 - 供應商提供的應用程式讀取這項資源並呼叫
TimeManager.suggestExternal()
。Android 接著就能使用提供的時間戳記 做為新系統時鐘值。