Приложение получает обратный вызов от 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);
}
});
Следующий шаг: управление обратными вызовами.