2016-03-30 11 views
0

Ich habe die Verfallsdauer meines Geofence unter Verwendung der Methode setExpirationDuration() festgelegt. Wie kann ich wissen, wann mein Geofence abgelaufen ist? Gibt es einen Rückruf oder etwas?Android Wie kann man wissen, wann Geofence abgelaufen ist?

Ich habe diese stackoverflow question gesehen, aber ich konnte es nicht herausfinden.

+0

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. –

Antwort

1

Derzeit gibt es keine API-Unterstützung, um die abgelaufenen Geofences zu erhalten, noch eine Liste von Geofences.

Ich sehe zwei Möglichkeiten:

  1. 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.

  2. 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" /> 
Verwandte Themen