react-native check and prompt user to enable Network/GPS

后端 未结 3 1105
北海茫月
北海茫月 2020-12-09 08:37

I am looking around on how to check if network or GPS are enabled on a device when my application starts. And if they are disabled prompt the user to enable it.

Is t

相关标签:
3条回答
  • 2020-12-09 09:05

    For enabling location/gps on Android I can recommend this module: https://github.com/Richou/react-native-android-location-enabler

    It is using the standard Android dialog for location:

    0 讨论(0)
  • 2020-12-09 09:07

    In recent versions of iOS (>= iOS8?) and Android you can show the app permissions dialog and let users turn on/off permissions such as camera and location. There is a native module to do that: https://github.com/yonahforst/react-native-permissions

    0 讨论(0)
  • 2020-12-09 09:12

    So I am going to start answering my own question.

    For GPS:

    there seems to be a sensible solution. IOS seems to natively request if there is a geolocation request. And for Android this is not natively supported but someone has created a module for that ( https://github.com/webyonet/react-native-android-location-services-dialog-box )

    so in my action creator I added the next code:

    if(Platform.OS === 'android')
    LocationServicesDialogBox.checkLocationServicesIsEnabled({ 
                    message: "<h2>Use Location?</h2> \
                                This app wants to change your device settings:<br/><br/>\
                                Use GPS for location<br/><br/>", 
                    ok: "YES", 
                    cancel: "NO" 
                }).then(() => { 
                    locationTracking(dispatch, getState, geolocationSettings)
                })
    

    For Network: There is no native support for neither so i end up doing my own action creator to check.

    export function networkCheck(){
      return (dispatch) => {
        const dispatchNetworkState = (isConnected) => dispatch({
          type: types.NETWORK_STATE,
          state: isConnected
        })
        const handle = () => NetInfo.isConnected.fetch().done(dispatchNetworkState)
        NetInfo.isConnected.addEventListener('change', handle);
      }
    }
    

    A little extra:

    for GPS i added this to check if the user goes and disable GPS on the middle of the task.

    export function locationCheck(geolocationSettings = {enableHighAccuracy: true, timeout: 20000, maximumAge: 10000, distanceFilter:10}){
      return (dispatch) => {
        navigator.geolocation.watchPosition(
            () => {
                dispatch({
                    type: types.LOCATION_STATE,
                    state: true
                })
            },
            () => {
                dispatch({
                    type: types.LOCATION_STATE,
                    state: false
                })
            },
            geolocationSettings)
      }
    }
    
    0 讨论(0)
提交回复
热议问题