每當圍欄狀態變更時,應用程式就會透過 PendingIntent 收到回呼。應用程式必須先註冊每個柵欄,才能使用。
註冊圍欄
如要註冊柵欄,請使用 FenceClient,如要建構 FenceUpdateRequest,請使用 FenceClient.updateFences()。針對要新增的每個圍欄呼叫 addFence()。
註冊和取消註冊柵欄時,必須符合下列條件:
- Google Play 服務 API 用戶端執行個體。
AwarenessFence執行個體,也就是柵欄本身。- 用於處理狀態變更的
PendingIntent。 - 圍欄鍵,這是用於識別圍欄的字串,並對應至
AwarenessFence-PendingIntent組合。
下列程式碼範例顯示呼叫 updateFences() 註冊柵欄的方法:
Awareness.getFenceClient(this).updateFences(new FenceUpdateRequest.Builder()
.addFence(FENCE_KEY, exercisingWithHeadphonesFence, mPendingIntent)
.build())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.i(TAG, "Fence was successfully registered.");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e(TAG, "Fence could not be registered: " + e);
}
});
如要建立多個具有專屬柵欄鍵的柵欄,請多次呼叫 addFence()。您可以視需要使用多個 PendingIntent 方法,但最好對所有柵欄回呼使用單一 PendingIntent。如果您使用已註冊的柵欄鍵呼叫 addFence(),系統會覆寫該鍵的 AwarenessFence 和 PendingIntent 值。
取消註冊圍欄
如要取消註冊柵欄,請呼叫 getFenceClient().updateFences(),並使用 FenceUpdateRequest.Builder() 建構柵欄更新要求。然後呼叫 removeFence(),如下列範例所示:
Awareness.getFenceClient(this).updateFences(new FenceUpdateRequest.Builder()
.removeFence(FENCE_KEY)
.build())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.i(TAG, "Fence was successfully unregistered.");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e(TAG, "Fence could not be unregistered: " + e);
}
});
後續步驟:管理柵欄回呼。