Geolocator

Additional

Language
Kotlin
Version
N/A
Created
Sep 6, 2019
Updated
Oct 11, 2019
Owner
exozet
Contributors
Jan Rabe (kibotu)
Sprotte
2
Activity
Badge
Generate
Download
Source code

Promotion

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

  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