Geofencer
Convience library to receive user location updates and geofence events with minimal effort.
Features:
supports Android-Q
receive updates on background
receive updates if app got killed
geofence updates (dwell, enter, exit)
location updates
configurable update intervals
Requirmenets
Location permissions in AndroidManifest.xml
Google maps api key YOUR_KEY
How to use
Geofence
class GeofenceIntentService : GeofenceIntentService() {
override fun onGeofence(geofence: Geofence) {
Log.v(GeoFenceIntentService::class.java.simpleName, "onGeofence $geofence")
}
}
Add receiver to your manifest
android:name=".kotlin.GeoFenceIntentService"
android:permission="android.permission.BIND_JOB_SERVICE" />
val geofence = Geofence(
id = UUID.randomUUID().toString(),
latitude = 51.0899232,
longitude = 5.968358,
radius = 30.0,
title = "Germany",
message = "Entered Germany",
transitionType = GEOFENCE_TRANSITION_ENTER
)
Geofencer(this).addGeofence(geofence, GeoFenceIntentService::class.java) { /* successfully added geofence */ }
Location Tracker
class LocationTrackerService : LocationTrackerUpdateIntentService() {
override fun onLocationResult(locationResult: LocationResult) {
Log.v(GeoFenceIntentService::class.java.simpleName, "onLocationResult $location")
}
}
Add receiver to manifest
android:name=".kotlin.LocationTrackerService"
android:permission="android.permission.BIND_JOB_SERVICE" />
LocationTracker.requestLocationUpdates(this, LocationTrackerService::class.java)
Stop tracking
LocationTracker.removeLocationUpdates(requireContext())
How to use in Java
Geofence
public class GeoFenceIntentService extends GeofenceIntentService {
@Override
public void onGeofence(@NotNull Geofence geofence) {
Log.v(GeoFenceIntentService.class.getSimpleName(), "onGeofence " + geofence);
}
}
Add receiver to your manifest
android:name=".java.GeoFenceIntentService"
android:permission="android.permission.BIND_JOB_SERVICE" />
Geofence geofence = new Geofence(
UUID.randomUUID().toString(),
51.0899232,
5.968358,
30.0,
"Germany",
"Entered Germany",
GEOFENCE_TRANSITION_ENTER);
Geofencer geofencer = new Geofencer(this);
geofencer.addGeofence(geofence, GeoFenceIntentService.class,
() -> /* successfully added geofence */ Unit.INSTANCE);
Location Tracker
public class LocationTrackerService extends LocationTrackerUpdateIntentService {
@Override
public void onLocationResult(@NotNull LocationResult location) {
Log.v(GeoFenceIntentService.class.getSimpleName(), "onLocationResult " + location); );
}
}
Add receiver to manifest
android:name=".java.LocationTrackerService"
android:permission="android.permission.BIND_JOB_SERVICE" />
LocationTracker.INSTANCE.requestLocationUpdates(this, LocationTrackerService.class);
Stop tracking
LocationTracker.INSTANCE.removeLocationUpdates(this);
How to install
jCenter / mavenCentral
implementation 'com.sprotte:Geolocator:latest'
or Jiptack
Step 1. Add the JitPack repository to your build file
Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.exozet:Geolocator:latest'
}
Configuration
Default Location tracking update intervals can be overriden, by adding following parameter into your app/res/ - folder, e.g. app/res/config.xml
0
0
0
0
Known Issues
does not work when in doze mode #2
Contributors