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