Geolocator

General

Category
Free
Tag
Location
License
MIT License
Min SDK
16 (Android 4.1 Jelly Bean)
Registered
Sep 7, 2019
Favorites
3
Link
https://github.com/exozet/Geolocator
See also
GpsDetector
AddressPicker
Locgetter
GPSTracker
geo

Additional

Language
Kotlin
Version
N/A
Created
Sep 6, 2019
Updated
Dec 6, 2023
Owner
Jan Rabe (kibotu)
Contributors
Jan Rabe (kibotu)
Sprotte
Agnaldo Pereira (AgnaldoNP)
Vidya Jejurkar (vidyajejurkar)
Khalid (khalid64927)
en-jschuetze
6
Activity
Badge
Generate
Download
Source code

Advertisement

Geofencer

Convenience library to receive user location updates and geofence events with minimal effort.

Features

  • supports Android 14
  • receive updates on background
  • receive updates if app got killed
  • geofence updates (dwell, enter, exit)
  • location updates
  • configurable update intervals

Requirements

  1. Location permissions in AndroidManifest.xml

     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_BACKGROUND_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 NotificationWorker : GeoFenceUpdateModule() {
 
    override fun onGeofence(geofence: Geofence) {
     Timber.v(, "onGeofence $geofence")
    }
}
  1. 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).addGeofenceWorker(geofence, NotificationWorker::class.java) { /* successfully added geofence */ }

Location Tracker

TODO: replace with worker

  1. Create Receiver
class LocationTrackerWorker : LocationTrackerUpdateModule() {

 override fun onLocationResult(locationResult: LocationResult) {  
  Log.v(GeoFenceIntentService::class.java.simpleName, "onLocationResult $location")
  }
}
  1. Start tracking
LocationTracker.requestLocationUpdates(this, LocationTrackerWorker::class.java)
  1. Stop tracking
LocationTracker.removeLocationUpdates(requireContext())

How to use in Java

Geofence

  1. Create Receiver
public class NotificationWorker extends GeoFenceUpdateModule {
 
 @Override
 public void onGeofence(@NotNull Geofence geofence) {
     Timber.d("onGeofence " + geofence);
    }
}
  1. 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.addGeofenceWorker(geofence, NotificationWorker.class,
     () -> /* successfully added geofence */ Unit.INSTANCE);          

Location Tracker

  1. Create Receiver
public class LocationTrackerWorker extends LocationTrackerUpdateModule {

    @Override
    public void onLocationResult(@NotNull LocationResult location) {
 
        Log.v(GeoFenceIntentService.class.getSimpleName(), "onLocationResult " + location);          );
    }
}
  1. Start tracking
LocationTracker.INSTANCE.requestLocationUpdates(this, LocationTrackerWorker.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'
 implementation 'com.google.android.gms:play-services-location:17.0.0'
}

Configuration

Default Location tracking update intervals can be overriden, by adding following parameter into your app/res/ - folder, e.g. app/res/config.xml

    <!-- Location Tracker -->
    <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>

    <!-- Geofencer -->
    <integer name="loitering_delay">1</integer>
    <integer name="notification_responsiveness">1</integer>
    <integer name="expiration_duration">-1</integer> // -1 == NEVER_EXPIRE

You can also set this values at runtime in some step before call method requestLocationUpdates

    int interval = 1000;
    int fastestInterval = 2000;
    int priority = LocationRequest.PRIORITY_HIGH_ACCURACY;
    int maxWaitTime = 10000;
    int smallestDisplacement = 20;

    LocationTrackerParams locationTrackerParams = new LocationTrackerParams(
            interval, fastestInterval, priority, maxWaitTime, smallestDisplacement);

    LocationTracker.INSTANCE.requestLocationUpdates(this, LocationTrackerService.class, locationTrackerParams);

LocationTrackerParams is a open class for kotlin or a not final class for java, so if you don't need to setup all params you can extend it.

Known Issues

  • does not work when in doze mode #2

Contributors

Jan Rabe

Paul Sprotte

[AgnaldoNP] (https://github.com/AgnaldoNP)

Mohammed Khalid Hamid