注册栅栏

每当栅栏状态发生变化时,您的应用都会收到 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(),则该键的 AwarenessFencePendingIntent 值会被覆盖。

取消注册栅栏

如需取消注册栅栏,请调用 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);
         
}
     
});

下一步:管理栅栏回调