注册栅栏

每当围栏的状态发生变化时,您的应用都会通过 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);
         }
     });

下一步:管理围栏回调