Зарегистрировать геозону

Приложение получает обратный вызов от PendingIntent каждый раз, когда меняется состояние геозоны. Прежде чем использовать геозону, ее нужно зарегистрировать в приложении.

Зарегистрировать ограждение

Чтобы зарегистрировать геозону, используйте FenceClient, а чтобы создать FenceUpdateRequest – FenceClient.updateFences(). Вызовите addFence() для каждой геозоны, которую нужно добавить.

Для регистрации и отмены регистрации геозоны требуется следующее:

  • Экземпляр API-клиента сервисов Google Play.
  • Экземпляр 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);
         }
     });

Следующий шаг: управление обратными вызовами геозоны.