Derzeit gibt es keine API-Unterstützung, um die abgelaufenen Geofences zu erhalten, noch eine Liste von Geofences.
Ich sehe zwei Möglichkeiten:
Wäre die geofences zu speichern (zB in SharedPreferences) und dann jedes Mal, wenn Sie wissen müssen, wenn ein Geofence abgelaufen, nur durch alle gespeicherten geofences laufen.
Möchten Sie eine Absicht planen, wenn der Geofence abgelaufen ist.
Implementierung für Option 1)
Ich schlage vor, Sie eine Klasse zu erstellen, die intern gespeichert werden können (in SharedPreferences zum Beispiel):
public class MyGeofence {
private String id;
private double latitude;
private double longitude;
private float radiusMeters;
private int transitionType;
private long expirationDurationMillis;
public Geofence buildGeofence() {
return new Geofence.Builder()
.setCircularRegion(latitude, longitude, radiusMeters)
.setRequestId(id)
.setExpirationDuration(expirationDurationMillis)
.setTransitionTypes(transitionType)
.build();
}
...
}
Also, wenn Sie hinzufügen möchten Bei einem Geofence sollten Sie zunächst ein Objekt dieser Klasse erstellen, aufrufen, es mit LocationServices.GeofencingApi.addGeofences()
hinzufügen und dann speichern.
Wenn Sie wissen möchten, welche Geofences abgelaufen sind, sollten Sie alle gespeicherten MyGeofence-Objekte durchlaufen.
Implementierung für Option 2)
Wenn Sie den Ablauf für Ihre Geofence gesetzt sollten Sie auch einen PendingIntent planen.
Intent notificationIntent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
long futureInMillis = SystemClock.elapsedRealtime() + delay;
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent);
Erinnern Sie sich im Manifest registrieren:
<receiver android:name=".MyBroadcastReceiver" />
Nur einige Kontext auf diese Frage zu bekommen, warum Sie, wenn ein Geofence oder nicht ist abgelaufen wissen wollen, sind? Um zu überprüfen, ob Ihr Geofence abgelaufen ist, haben Sie überprüft, ob die Geofence-Liste in der GeofencingRequest-Klasse überprüft, ob Sie Geofence noch in der Liste sind? Laut den Dokumenten wird ein Geofence, sobald er abgelaufen ist, entfernt. –