In IOS gps coordsを探している間に問題はありません。それは正常に動作します。
On Android side IOSとしては安定していません。実際のデバイスとエミュレーターの両方でこの問題が発生します。
アプリが現在地を見つけられない場合、Googleマップアプリを使用してみました。
IOSと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 }
);
}
あらゆる種類のソリューションを歓迎します。
ありがとう
ネイティブLocationManager
を使用する外部ライブラリ経由で解決策を見つけました。プレイサービスロケーションと発信イベントを使用します。
これがライブラリです。 https://bitbucket.org/timhagn/react-native-google-locations#readme
Android向けにコンパイルする場合は、Android/app/build.gradle
を含めることを忘れないでください
dependencies {
...
compile "com.google.Android.gms:play-services:10.0.1" -> which version that you have write down here.
...
}
そして最後に、Google Play Services
とGoogle Support Library
をAndroid SDK Managerでダウンロードすることを忘れないでください。プレイサービスのバージョンを見つけることができます。
<Android-sdk-location>/<sdk-version>/extras/google/m2repository/com/google/Android/gms/play-services
私は削除しました maximumAge: 3600000
on Android and it working
あなたが建物やオフィスの中にいて、信号がそれほど良くない可能性があります。私は多くの構成を試しましたが、これは私に最適です:
{
enableHighAccuracy: false,
timeout: 5000,
maximumAge: 10000
}
または、タイムアウトを増やしてみてください。私にとっては、通常の2000msが機能していなかったため、「Location request timed out」を取得し続けました。そのため、高精度を無効にし、タイムアウトを増やしてください。
こんにちは私は同じ問題に直面していた「リクエストタイムアウト」。私が見つけたすべての可能な解決策を試しましたが、それらは私のために働くことができませんでしたが、最近、この問題を克服する1つのモジュールを見つけました。 react-native-geolocation-service これは私のために働いた.....
位置情報リクエストによりアプリを作成しました。コマンド{ enableHighAccuracy: true, timeout: 25000, maximumAge: 3600000 },
はiOSでは動作しますが、Androidでは動作しません。プラットフォームを確認する必要があると思います。
navigator.geolocation.getCurrentPosition(
(location) => {
console.log('location ', location);
if (this.validLocation(location.coords)) {
this.locationToAddress(location.coords);
}
},
(error) => {
console.log('request location error', error);
},
Platform.OS === 'Android' ? {} : { enableHighAccuracy: true, timeout: 20000, maximumAge: 10000 }
);
さまざまな方法とnpmモジュールを試しました。最後に、このモジュールを使用してこの問題を解決しました。これを強くお勧めします。 https://www.npmjs.com/package/react-native-geolocation-service
Working{enableHighAccuracy:false、timeout:5000、maximumAge:10000}、
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
Pリストに許可を追加し、Androidマニフェストも
import React, { Component } from 'react';
import { View, Text } from 'react-native';
export default class App 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: false, timeout: 5000, maximumAge: 10000 },
// { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 },
);
}
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>
);
}
}