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()
}