2017-01-22 9 views

Odpowiedz

6

Więc zacznę odpowiadać na moje własne pytanie.

Dla GPS:

wydaje się rozsądnym rozwiązaniem. Wydaje się, że system IOS żąda natywnie, jeśli istnieje żądanie geolokalizacji. A dla Androida nie jest natywnie obsługiwane, ale ktoś stworzył moduł do tego (https://github.com/webyonet/react-native-android-location-services-dialog-box)

więc moim twórcy akcji dodałem kolejny kod:

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

Dla sieci: Nie ma natywne wsparcie ponieważ ja też nie robię własnego kreatora akcji, żeby to sprawdzić.

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

Trochę dodatkowo:

dla GPS i dodaje to, by sprawdzić, czy użytkownik przechodzi i wyłączyć GPS na środku zadania.

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

"Wydaje się, że IOS natywnie żąda, jeśli istnieje żądanie geolokalizacji" - zdarza się to tylko na pierwsze żądanie. na późniejsze żądania po prostu nie działają z kodem i nie wyświetlają żadnego monitu z dialogiem. Testowany na iPhone SE z systemem iOS 8 i komunikat o błędzie Otrzymuję go "Usługi lokalizacyjne wyłączone". – Vee6

1

W najnowszych wersjach iOS (> = iOS8?) I Android można wyświetlić okno dialogowe uprawnień aplikacji i pozwolić użytkownikom włączać/wyłączać uprawnienia, takie jak kamera i lokalizacja. Jest to moduł macierzysty: https://github.com/yonahforst/react-native-permissions

+3

dziękuję Haitao za odpowiedź. Ale tego nie szukam. To nie jest pytanie o uprawnienia to kwestia włączonych lub nie włączonych możliwości sprzętowych w czasie wykonywania (uprawnienia już istnieją). – Kanekotic