This library will emit an event whenever there is a change in the GPS status, like when the permission was rejected or when the user disables Location Service in the phone settings.
- Add library to project
yarn add react-native-gps-state
- OR
npm install --save react-native-gps-state
- Link library to project
react-native link react-native-gps-state
If the link fails, do a manual setup:
android/settings.gradle
include ':react-native-gps-state'
project(':react-native-gps-state').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gps-state/android')
android/app/build.gradle
dependencies {
...
implementation project(':react-native-gps-state')
}
MainApplication.java
On top, where imports are:
import br.com.dopaminamob.gpsstate.GPSStatePackage;
Add the new GPSStatePackage()
class to your list of exported packages.
@Override
protected List<ReactPackage> getPackages() {
return Arrays.asList(
new MainReactPackage(),
new GPSStatePackage(),
);
}
Platform | Status Code | Constant | Description |
---|---|---|---|
IOS/Android | 0 | NOT_DETERMINED | The user has not yet made a choice regarding whether this app can use location services. |
IOS/Android | 1 | RESTRICTED | This app is not authorized to use location services. |
IOS/Android | 2 | DENIED | The user explicitly denied the use of location services for this app or location services are currently disabled in Settings. |
IOS/Android | 3 | AUTHORIZED | This app is authorized to use location services. |
IOS | 3 | AUTHORIZED_ALWAYS | This app is authorized to start location services at any time. |
IOS | 4 | AUTHORIZED_WHENINUSE | This app is authorized to start most location services while running in the foreground |
//Open a system dialog requesting permission
//authType could be one of `AUTHORIZED_ALWAYS` or `AUTHORIZED_WHENINUSE`
GPSState.requestAuthorization(authType)
//Open the system Settings to enable user to toggle Location on.
GPSState.openLocationSettings()
//Open the system Settings in app details, so the user could manage all permissions in the `Permissions` tab
//in Android bellow M will fallback to `openLocationSettings()`
GPSState.openAppDetails()
//ANDROID ONLY
//return true if system version is Marshmallow or above
GPSState.isMarshmallowOrAbove()
//return true if the location permission is granted
GPSState.isAuthorized()
//return true if the location permission is denied
GPSState.isDenied()
//Get the current GPS state
GPSState.getStatus().then((status)=>{
})
import GPSState from 'react-native-gps-state'
...
componentWillMount(){
GPSState.addListener((status)=>{
switch(status){
case GPSState.NOT_DETERMINED:
alert('Please, allow the location, for us to do amazing things for you!')
break;
case GPSState.RESTRICTED:
GPSState.openLocationSettings()
break;
case GPSState.DENIED:
alert('It`s a shame that you do not allowed us to use location :(')
break;
case GPSState.AUTHORIZED_ALWAYS:
//TODO do something amazing with you app
break;
case GPSState.AUTHORIZED_WHENINUSE:
//TODO do something amazing with you app
break;
}
})
GPSState.requestAuthorization(GPSState.AUTHORIZED_WHENINUSE)
}
componentWillUnmount(){
GPSState.removeListener()
}