Skip to content
Location tracking & geofencing the easy way. Supports background, killed app, rebooted device different update intervals.
Kotlin Java
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Android-Dependencies @ 6b71838
Geolocator
app
gradle/wrapper
.gitignore
.gitmodules
LICENSE.md
README.md
build.gradle
debug.jks
gradle.properties
gradlew
gradlew.bat
release.jks
sample.gif
settings.gradle

README.md

Geofencer

Build Status Download API Gradle Version Kotlin Android Arsenal

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

sample.gif

Requirmenets

  1. Location permissions in AndroidManifest.xml

     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    
  2. Google maps api key

     <string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">YOUR_KEY</string>
    

How to use

Geofence

  1. Create Receiver
class GeofenceIntentService : GeofenceIntentService() {
	
    override fun onGeofence(geofence: Geofence) {
    	Log.v(GeoFenceIntentService::class.java.simpleName, "onGeofence $geofence")	    
    }
}
  1. Add receiver to your manifest

     <service
         android:name=".kotlin.GeoFenceIntentService"
         android:permission="android.permission.BIND_JOB_SERVICE" />
    
  2. Start geofence tracking

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

  1. Create Receiver
class LocationTrackerService : LocationTrackerUpdateIntentService() {

	override fun onLocationResult(locationResult: LocationResult) {  
		Log.v(GeoFenceIntentService::class.java.simpleName, "onLocationResult $location")
  }
}
  1. Add receiver to manifest

     <service
         android:name=".kotlin.LocationTrackerService"
         android:permission="android.permission.BIND_JOB_SERVICE" />
    
  2. Start tracking

LocationTracker.requestLocationUpdates(this, LocationTrackerService::class.java)
  1. Stop tracking
LocationTracker.removeLocationUpdates(requireContext())

How to use in Java

Geofence

  1. Create Receiver
public class GeoFenceIntentService extends GeofenceIntentService {
	
	@Override
	public void onGeofence(@NotNull Geofence geofence) {
	
    	Log.v(GeoFenceIntentService.class.getSimpleName(), "onGeofence " + geofence);	    	
   	}
}
  1. Add receiver to your manifest

     <service
         android:name=".java.GeoFenceIntentService"
         android:permission="android.permission.BIND_JOB_SERVICE" />
    
  2. Start geofence tracking

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

  1. Create Receiver
public class LocationTrackerService extends LocationTrackerUpdateIntentService {

    @Override
    public void onLocationResult(@NotNull LocationResult location) {
	
        Log.v(GeoFenceIntentService.class.getSimpleName(), "onLocationResult " + location);		        );
    }
}
  1. Add receiver to manifest

     <service
         android:name=".java.LocationTrackerService"
         android:permission="android.permission.BIND_JOB_SERVICE" />
    
  2. Start tracking

LocationTracker.INSTANCE.requestLocationUpdates(this, LocationTrackerService.class);
  1. 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

<integer name="location_update_interval_in_millis">0</integer>
<integer name="location_fastest_update_interval_in_millis">0</integer>
<integer name="location_max_wait_time_interval_in_millis">0</integer>
<integer name="location_min_distance_for_updates_in_meters">0</integer>

Known Issues

  • does not work when in doze mode #2

Contributors

Jan Rabe

Paul Sprotte

You can’t perform that action at this time.