web-dev-qa-db-fra.com

vérification de la réponse native et invite l'utilisateur à activer le réseau/GPS

Je regarde autour de moi pour vérifier si le réseau ou le GPS sont activés sur un périphérique au démarrage de mon application. Et s’ils sont désactivés, invitez l’utilisateur à l’activer.

Est-ce possible dans React-native?, Et existe-t-il une classe ou un outil pouvant aider à ce type de dialogues?

17
Kanekotic

Je vais donc commencer à répondre à ma propre question.

Pour le GPS:

il semble y avoir une solution raisonnable. IOS semble demander nativement s'il y a une demande de géolocalisation. Et pour Android, cela n’est pas supporté de manière native, mais quelqu'un a créé un module pour cela ( https://github.com/webyonet/react-native-Android-location-services-dialog-box )

donc dans mon créateur d'action j'ai ajouté le code suivant:

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

Pour le réseau: Il n'y a pas de support natif pour ni donc je finis par faire mon propre créateur d'action pour vérifier 

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

Un petit extra:

pour GPS, j’ajoute ceci pour vérifier si l’utilisateur va désactiver le GPS au milieu de la tâche.

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)
  }
}
15
Kanekotic

Pour activer la localisation/gps sur Android, je peux recommander ce module: https://github.com/Richou/react-native-Android-location-enabler

Il utilise la boîte de dialogue standard Android pour l’emplacement:  enter image description here

4
Mate

Dans les versions récentes d'iOS (> = iOS8?) Et d'Android, vous pouvez afficher la boîte de dialogue des autorisations d'application et permettre aux utilisateurs d'activer/désactiver les autorisations telles que la caméra et l'emplacement. Il existe un module natif pour le faire: https://github.com/yonahforst/react-native-permissions

0
Haitao Li