Ich habe das Android-Tutorial mit Geofences verwendet, das offensichtlich nicht funktioniert, wenn die App geschlossen ist. Also, nachdem ich mich umgesehen habe, habe ich festgestellt, dass Benutzer bryce auf SO BroadcastReceiver verwendet hat, damit Geofences ausgelöst werden, auch wenn die App nicht aktiv ist (Link zu seiner SO-Frage).
Ich kann einfach nicht die Geofences auslösen, wenn ich mich außerhalb/innerhalb des registrierten Standorts bewege. Hier ist mein Vorgehen:
/**
* GeoLocation-Bibliothek
*/
mGeoLocation = new GeoLocation(sInstance);
/**
* Initialisierung von mReceiver
*/
mReceiver = new Receiver();
sInstance.registerReceiver(mReceiver, mReceiver.createIntentFilter());
Und innerhalb der GeoLocation-Klasse:
/*
* Erstellen Sie ein PendingIntent, das ein IntentService in Ihrer
* App auslöst, wenn ein Geofence-Übergang auftritt.
*/
protected PendingIntent getTransitionPendingIntent() {
if (mGeoPendingIntent != null) {
return mGeoPendingIntent;
}
else {
// Erstellen Sie einen expliziten Intent
// Intent intent = new Intent(mContext,
// ReceiveTransitionsIntentService.class);
Intent intent = new Intent(getClass().getPackage().getName() + ".GEOFENCE_RECEIVE");
/**
* Rückgabe des PendingIntents
*/
return PendingIntent.getBroadcast(
mContext,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
}
So erstelle ich einen neuen Geofence:
Geofence fence = new Geofence.Builder()
.setRequestId(hashCode)
// beim Betreten dieses Geofence
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT)
.setCircularRegion(
Double.parseDouble(single.getSetting("latitude")),
Double.parseDouble(single.getSetting("longitude")),
Float.parseFloat(single.getSetting("radius")) // Radius in Metern
)
.setExpirationDuration(Geofence.NEVER_EXPIRE)
.build();
mGeofences.add(fence);
Das Array wird gefüllt und wir rufen die Methode AddGeofences in der Geofence-Klasse auf
mGeoLocation.AddGeofences(mGeofences);
AndroidManifest.xml für die Receiver-Klasse:
Und die Receiver-Klasse soll einfach protokollieren, wenn der Geofence ausgelöst wird
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d("sfen", "Broadcast empfangen "+ action +" aber nicht benötigt.");
}
Das Problem ist, dass die Geofences NUR ausgelöst werden, wenn ich die Karte in meiner App öffne, wo ich die Standorte auswähle. Wenn ich die App schließe (im Hintergrund laufen lasse), wird nichts ausgelöst und die Geofence-Übergänge lösen nichts aus.
Kann mir jemand sagen, was ich falsch mache?