LocationProvider is a tiny library that abstracts away a lot of the pain of getting a users location from the phone (without having to call location APIs), provides a fully configurable standard Builder pattern and a set of callbacks.
With the most basic usage, you give it a context and a callback and you're good to go!
DISCLAIMER: This library needs the COARSE and FINE permissions, but it assumes they have been given beforehand
- add the jitpack dependency:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- add a dependency to your
app/build.gradle
:
dependencies {
implementation 'com.github.david-serrano:locationprovider:v1'
}
//create a callback
LocationProvider.LocationCallback callback = new LocationProvider.LocationCallback() {
@Override
public void onNewLocationAvailable(float lat, float lon) {
//location update
}
@Override
public void locationServicesNotEnabled() {
//failed finding a location
}
@Override
public void updateLocationInBackground(float lat, float lon) {
//if a listener returns after the main locationAvailable callback, it will go here
}
@Override
public void networkListenerInitialised() {
//when the library switched from GPS only to GPS & network
}
};
//initialise an instance with the two required parameters
LocationProvider locationProvider = new LocationProvider.Builder()
.setContext(this)
.setListener(callback)
.create();
//start getting location
locationProvider.requestLocation();
The library provides a standard Builder pattern with a few configurable options but uses default values if none are set. In the most standard use case it will:
- Look for last known locations in order the following order
passive
,gps
,network
. If those return a valueonNewLocationAvailable
will be called. - Initialise a GPS listener or network listener depending on availability of service (high accuracy vs battery saving for example)
- Return location based on available providers:
- If GPS initialised but taking too long, start a network listener after X (configurable) seconds.
- If only network initialised, some phones fail to update the listener but update the passive values correctly, so after Y (configurable) seconds, try the last known locations again.
- Return values for GPS/network when available and shut down self.