I've used the Android tutorial with Geofences which, obviously, doesn't
work when app is closed. So, after searching around, I've noticed user
b-ryce on SO used BroadcastReceiver so geofences get triggered even if app
is not active (link for his SO question
<http://stackoverflow.com/questions/19505614/android-geofence-eventually-stop-getting-transition-intents/19521823#19521823>
).
I just cannot force geofences to trigger when I move outside/inside
registered location. Here's my procedure:
/**
* GeoLocation library
*/
mGeoLocation = new GeoLocation(sInstance);
/**
* mReceiver init
*/
mReceiver = new Receiver();
sInstance.registerReceiver(mReceiver, mReceiver.createIntentFilter());
And inside GeoLocation class:
/*
* Create a PendingIntent that triggers an IntentService in your
* app when a geofence transition occurs.
*/protected PendingIntent getTransitionPendingIntent() {
if (mGeoPendingIntent != null) {
return mGeoPendingIntent;
}
else {
// Create an explicit Intent
// Intent intent = new Intent(mContext,
// ReceiveTransitionsIntentService.class);
Intent intent = new Intent(getClass().getPackage().getName() +
".GEOFENCE_RECEIVE");
/**
* Return the PendingIntent
*/
return PendingIntent.getBroadcast(
mContext,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
}}
Here's how I create new geofence:
Geofence fence = new Geofence.Builder()
.setRequestId(hashCode)
// when entering this 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 meters
)
.setExpirationDuration(Geofence.NEVER_EXPIRE)
.build();
mGeofences.add(fence);
Array gets populated and we call AddGeofences method inside Geofence class
mGeoLocation.AddGeofences(mGeofences);
AndroidManifest.xml for reciever class:
<!-- RECEIVER -->
<receiver android:name=".Receiver" >
</receiver>
And the Receiver class should just log when geofence triggers
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d("sfen", "Broadcast recieved "+ action +" but not needed.");}
The problem is, that Geofence are triggering ONLY when I open map inside my
app where I pick the locations. Closing the app (running it in background)
doesn't trigger anything and geofence transitions don't trigger anything.
Can someone tell me what am I doing wrong?
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
---
You received this message because you are subscribed to the Google Groups
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.