2017-01-22 2 views
7

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

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

ответ

6

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

Для GPS:

, кажется, разумное решение. Кажется, что IOS запрашивает запрос геолокации. И для Android это изначально не поддерживается, но кто-то создал модуль для этого (https://github.com/webyonet/react-native-android-location-services-dialog-box)

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

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

«Кажется, что IOS запрашивает запрос, если есть запрос геолокации» - похоже, что это происходит только по первому запросу. при последующих запросах они просто выходят из кода и не отображают никаких диалоговых подсказок. Протестировано на iPhone SE с iOS 8 и сообщение об ошибке, которое я получил, «Службы определения местоположения отключены». – Vee6

1

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

+3

благодарит Хайтао за ответ. Но это не то, что я ищу. Речь идет не о разрешении, а о возможностях включения или отсутствия аппаратного обеспечения во время выполнения (разрешения уже есть). – Kanekotic

Смежные вопросы