可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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;