共用方式為


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 地理柵欄狀態圖表。

此狀態圖表的主要層面包括:

  • 從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