React Native Android location request timed out

匿名 (未验证) 提交于 2019-12-03 08:48:34

问题:

In IOS there isn't a problem while looking for gps coords. It works fine.

On Android side its not stable as IOS. This problem both in real device and emulator. Sometimes it can find location, but sometimes not. Looking for 3days but there wasn't find a solution.

When my app cannot find my location, I tried via Google Maps app, it works like charm.

Here is my code for both IOS and Android;

getCurrentPosition() {     navigator.geolocation.getCurrentPosition(         (position) => {             this.setState({ initialPosition: position });             alert(JSON.stringify(position))             var coords = new Coords();             coords.Latitude = position.coords.latitude;             coords.Longitude = position.coords.longitude;             this.getPharmaciesByCoordinates(coords);         },         (error) => alert(error.message),         { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }     );     this.watchID = navigator.geolocation.watchPosition((position) => {         this.setState({ initialPosition: position });     },         (error) => alert(error.message),         { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }     ); } 

Any kind of solution is welcome.

Thanks

回答1:

It's possible that you are inside of the building or office and your signal is not that good. I've tried with many configuration and this one fit the best for me:

{     enableHighAccuracy: false,     timeout: 5000,     maximumAge: 10000 } 

Or try increasing timeout. Because for me the usual 2000ms wasn't working, I kept getting "Location request timed out". So disable high accuracy, increase timeout and you're good to go.



回答2:

I found a solution via external lib that uses native LocationManager. It uses play services location and emitting location event as I want.

Here is the library; https://bitbucket.org/timhagn/react-native-google-locations#readme

And when compiling for android, don't forget to include android/app/build.gradle

dependencies {     ...     compile "com.google.android.gms:play-services:10.0.1" -> which version that you have write down here.     ... } 

And finally don't forget to download Google Play Services and Google Support Library in Android SDK Manager you can find your play services versions into;

<android-sdk-location>/<sdk-version>/extras/google/m2repository/com/google/android/gms/play-services 


回答3:

I removed maximumAge: 3600000 on Android and it working



回答4:

the tricks is, if you set

{ enableHighAccuracy: true, timeout: 25000, maximumAge: 3600000 }  

then it will work. full code below.

import React, { Component } from 'react'; import { View, Text } from 'react-native';  class GeolocationExample extends Component { constructor(props) { super(props);  this.state = {   latitude: null,   longitude: null,   error: null, }; }  componentDidMount() { navigator.geolocation.getCurrentPosition(   (position) => {     this.setState({       latitude: position.coords.latitude,       longitude: position.coords.longitude,       error: null,        });        },   (error) => this.setState({ error: error.message }),   { enableHighAccuracy: true, timeout: 25000, maximumAge: 3600000 }, );}   render() { return (   <View style={{ flexGrow: 1, alignItems: 'center', justifyContent: 'center' }}>     <Text>Latitude: {this.state.latitude}</Text>     <Text>Longitude: {this.state.longitude}</Text>     {this.state.error ? <Text>Error: {this.state.error}</Text> : null}   </View>   );  } }  export default GeolocationExample; 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!