2017-01-22 8 views
7

私は、アプリケーションが起動したときにネットワークまたはGPSがデバイスで有効になっているかどうかを調べる方法について調べています。また、無効になっている場合は、ユーザーに有効にするよう促します。ネットワーク/ GPSを有効にするために反応するネイティブチェックとプロンプトユーザー

これはReact-nativeですか?このタイプのダイアログに役立つクラスやツールはありますか?

答えて

6

私は自分自身の質問に答えるつもりです。

GPSの場合:

感知できる解決策があるようです。 IOSは、ジオロケーション要求がある場合、ネイティブに要求しているようです。ネットワーク用

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

: ネイティブサポートはありません、私は次のコードを追加したAndroidのために、これはネイティブでサポートされていませんが、誰かが自分の行動の作成者になるようにするためのモジュール(https://github.com/webyonet/react-native-android-location-services-dialog-box

を作成しましたいずれにせよ、私は自分のアクションクリエイターをチェックすることをやります。

少し余分
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は、ジオロケーション要求がある場合、ネイティブに要求しているようです" - 最初の要求でのみ発生するようです。後のリクエストでは単にコードから失敗し、ダイアログプロンプトは表示されません。 iOS 8搭載のiPhone SEでテストしたところ、エラーメッセージ "Location services disabled"が表示されました。 – Vee6

1

最近のバージョンのiOS(> = iOS8?)とAndroidでは、アプリの権限ダイアログを表示して、カメラや場所などの権限をオン/オフできるようにすることができます。 https://github.com/yonahforst/react-native-permissions

+3

答えのためのHaitao。しかし、これは私が探しているものではありません。これは、実行時にハードウェア機能が有効かどうかの問題です(権限はすでに存在しています)。 – Kanekotic

関連する問題