Ihre App erhält von PendingIntent
einen Callback, wenn sich der Status eines Fence ändert. Ihre App muss jeden Fence registrieren, bevor er verwendet werden kann.
Geofence registrieren
Verwenden Sie zum Registrieren eines Zauns FenceClient
und zum Erstellen eines FenceUpdateRequest
FenceClient.updateFences()
.
Rufen Sie addFence()
für jeden Zaun auf, den Sie hinzufügen möchten.
Für die Registrierung und Deregistrierung eines Geofence sind folgende Voraussetzungen erforderlich:
- Eine Google Play Services API-Client-Instanz.
- Eine
AwarenessFence
-Instanz, die den Fence selbst darstellt. - Eine
PendingIntent
zur Verarbeitung von Statusänderungen. - Ein Fence-Schlüssel, der ein String ist, der das Fence identifiziert und einem
AwarenessFence
-PendingIntent
-Paar zugeordnet wird.
Das folgende Codebeispiel zeigt eine Methode, die updateFences()
aufruft, um einen Zaun zu registrieren:
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);
}
});
Wenn Sie mehrere Geofences mit eindeutigen Geofence-Schlüsseln erstellen möchten, rufen Sie addFence()
mehrmals auf. Sie können beliebig viele PendingIntent
-Methoden verwenden, es ist jedoch besser, eine einzelne PendingIntent
für alle Fence-Callbacks zu verwenden. Wenn Sie einen bereits registrierten Fence-Schlüssel verwenden, um addFence()
aufzurufen, werden die Werte AwarenessFence
und PendingIntent
für diesen Schlüssel überschrieben.
Registrierung eines Geofence aufheben
Rufen Sie getFenceClient().updateFences()
auf, um einen Geofence zu deregistrieren, und verwenden Sie FenceUpdateRequest.Builder()
, um eine Geofence-Aktualisierungsanfrage zu erstellen. Rufen Sie dann removeFence()
auf, wie im folgenden Beispiel gezeigt:
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);
}
});
Nächster Schritt: Fence-Rückrufe verwalten.