Реактивная проверка и предложение пользователю включить сеть /GPS

Я смотрю, как проверить, включена ли сеть или GPS на устройстве при запуске моего приложения. И если они отключены, попросите пользователя включить его.

Возможно ли это в React-native?, и есть ли какой-либо класс или инструмент, который мог бы помочь в этом типе диалогов?

Ответ 1

Итак, я собираюсь начать отвечать на свой вопрос.

Для GPS:

кажется, есть разумное решение. IOS, кажется, изначально запрашивает, есть ли запрос геолокации. А для Android это не поддерживается изначально, но кто-то создал модуль для этого (https://github.com/react-native-community/react-native-permissions)

поэтому в моем создателе действий я добавил следующий код:

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

Для сети: нет никакой встроенной поддержки ни для одного, поэтому я заканчиваю тем, что делаю свой собственный создатель действий для проверки.

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

Немного больше:

для GPS я добавил это, чтобы проверить, если пользователь идет и отключить GPS в середине задачи.

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

Ответ 2

Для включения местоположения /GPS на Android я могу порекомендовать этот модуль: https://github.com/Richou/react-native-android-location-enabler

Он использует стандартный диалог Android для определения местоположения: enter image description here

Ответ 3

В последних версиях iOS ( >= iOS8?) и Android вы можете отобразить диалоговое окно разрешений приложений и позволить пользователям включать/отключать разрешения, такие как камера и местоположение. Для этого есть собственный модуль: https://github.com/yonahforst/react-native-permissions