web-dev-qa-db-ja.com

React Native Androidロケーションリクエストがタイムアウトしました

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

あらゆる種類のソリューションを歓迎します。

ありがとう

19
İsmail Şener

ネイティブ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 ServicesGoogle Support LibraryAndroid SDK Managerでダウンロードすることを忘れないでください。プレイサービスのバージョンを見つけることができます。

<Android-sdk-location>/<sdk-version>/extras/google/m2repository/com/google/Android/gms/play-services
1
İsmail Şener

私は削除しました maximumAge: 3600000 on Android and it working

10
Thai Ha

あなたが建物やオフィスの中にいて、信号がそれほど良くない可能性があります。私は多くの構成を試しましたが、これは私に最適です:

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

または、タイムアウトを増やしてみてください。私にとっては、通常の2000msが機能していなかったため、「Location request timed out」を取得し続けました。そのため、高精度を無効にし、タイムアウトを増やしてください。

5
mdeket

こんにちは私は同じ問題に直面していた「リクエストタイムアウト」。私が見つけたすべての可能な解決策を試しましたが、それらは私のために働くことができませんでしたが、最近、この問題を克服する1つのモジュールを見つけました。 react-native-geolocation-service これは私のために働いた.....

4

位置情報リクエストによりアプリを作成しました。コマンド
{ 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  }
        );
1
Tuan Nguyen

さまざまな方法とnpmモジュールを試しました。最後に、このモジュールを使用してこの問題を解決しました。これを強くお勧めします。 https://www.npmjs.com/package/react-native-geolocation-service

0

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>
    );
  }
}
0
Keshav Gera