每当栅栏状态发生变化时,您的应用都会通过 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);
}
});
后续步骤:管理栅栏回调。