GNSS_GEOFENCE_STATE列舉 (gnssdriver.h)
GNSS_GEOFENCE_STATE列舉單一地理柵欄的各種狀態。
Syntax
typedef enum {
GNSS_GeofenceState_Unknown,
GNSS_GeofenceState_Entered,
GNSS_GeofenceState_Exited
} GNSS_GEOFENCE_STATE;
常數
GNSS_GeofenceState_Unknown 地理柵欄的狀態不明。 |
GNSS_GeofenceState_Entered 已輸入地理柵欄。 |
GNSS_GeofenceState_Exited 地理柵欄已結束。 |
備註
HLOS 會使用下列位掩碼來要求地理柵欄的狀態變更警示:
#define GNSS_GEOFENCEALERTTYPE_ENTRY GNSS_GeofenceState_Entered // Enter Geofence
#define GNSS_GEOFENCEALERTTYPE_EXIT GNSS_GeofenceState_Exited // Exit Geofence
當地理柵欄的先前狀態未知或結束,且裝置現在已進入地理柵欄時,就會引發專案警示。
進入地理柵欄的先前狀態且裝置現在已結束地理柵欄時,就會引發結束警示。 如果地理柵欄先前的狀態不明,且裝置目前不在地理柵欄之外,則不會產生任何結束警示。
當柵欄先前的已知狀態位於柵欄內時,位置平臺只會將結束觸發程式傳送至應用程式。 這是一個設計決策,可避免地理柵欄設定 (上的結束事件聊天 (例如,若使用者預期使用者設定來自家的結束柵欄,就必須在家外設定通知時,在家外設定通知時) 。 不過,位置平臺可以處理 GNSS 驅動程式傳送結束事件的位置,但不建議使用,因為 GNSS 配接器和 GNSS 驅動程式之間的互動會變得非常詳細。 由於使用者進入地理柵欄的機會遠小於地理柵欄外部的使用者,此行為可減少 GNSS 驅動程式與 GNSS 配接器之間的必要互動。 例如,在推送至 GNSS 驅動程式的 100 個地理柵欄的情況下,而且使用者全都不在其中,而不需要此行為,就必須傳送至 GNSS 配接器 100 個結束通知。 專案事件發生類似此情況的可能性非常小。
地理柵欄狀態轉換和相關聯的警示如下所示。 為了簡單起見,斷線和地理柵欄界限條件是隱含的。
此狀態圖表的主要層面包括:
從GNSS_GeofenceState_Unknown轉換為GNSS_GeofenceState_Exited狀態時,不會引發警示。
當 GNSS 引擎完全無法追蹤任何地理柵欄時,必須引發單一全域追蹤狀態警示,而不是每個地理柵欄的一個警示。 GNSS 引擎可以維護每個柵欄的最後一個已知狀態,而不是轉換至GNSS_GeofenceState_Unknown狀態,因此當它能夠再次追蹤時,可以根據新的進入/結束偵測來引發所需的地理柵欄警示。
不過,維護此最後一個已知狀態並非必要狀態,因為一旦 GNSS 驅動程式引發事件時,gnss_geofences_tracking_status為 FAILURE,HLOS 中的位置平臺就會開始執行地理柵欄追蹤。 在此期間,如果可以再次追蹤地理柵欄,GNSS 引擎應該以電源優化的方式繼續檢查。 IHV 可以使用優化,以低電源進行這項偵測。 優化的常見技術包括:
漸進式輪詢
等候指出裝置移動的低成本訊號,例如加速器數據或行動數據/WiFi 變更通知。
使用公用地理位置 WinRT API 從 HLOS 要求低精確度距離追蹤會話。
衛星訊號的低電源檢查。
當 GNSS 引擎能夠再次追蹤地理柵欄時,它會藉由將gnss_geofence_tracking_status設定為 GNSS 配接器/HLOS 來通訊
GNSS 配接器會發出GNSS_ResetGeofenceTracking命令,並使用每個地理柵欄的目前進入/結束準則重新新增目前作用中的地理柵欄。 如果追蹤的地理柵欄集已變更,或處於任何地理柵欄的狀態已變更,就必須這麼做。
規格需求
需求 | 值 |
---|---|
標頭 | gnssdriver.h |