This lib will emitevent wheneaver the GPS status change, like when the permission was rejected or user disable Location service in system 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 {
...
compile 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 the system Settings to enable user to toggle Location on.
The parameter openInDetails
(android only) is used to open app details screen (android M+ only), so the user can toggle the permission in Permissions
tab.
//openInDetails defaults to true
GPSState.openSettings(openInDetails:boolean);
//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.openSettings();
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;
}
});
}
componentWillUnmount(){
GPSState.removeListener();
}