webentwicklung-frage-antwort-db.com.de

Zeitüberschreitung beim Reagieren einer systemeigenen Android-Standortanfrage

In IOS gibt es kein Problem bei der Suche nach GPS-Koordinaten. Es funktioniert gut.

Auf Android-Seite ist es nicht so stabil wie IOS. Dieses Problem sowohl in realen Geräten als auch im Emulator. Manchmal kann es einen Ort finden, aber manchmal nicht. Auf der Suche nach 3Tagen, aber es gab keine Lösung.

Wenn meine App meinen Standort nicht finden kann, habe ich es mit der Google Maps-App ausprobiert.

Hier ist mein Code für IOS und 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 }
    );
}

Jede Art von Lösung ist willkommen. 

Vielen Dank

12
İsmail Şener

Ich habe über externe lib eine Lösung gefunden, die native LocationManager verwendet. Es verwendet Play-Services-Standort und gibt Standortereignisse frei, wie ich möchte.

Hier ist die Bibliothek: https://bitbucket.org/timhagn/react-native-google-locations#readme

Vergessen Sie beim Kompilieren für Android nicht, Android/app/build.gradle anzugeben.

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

Vergessen Sie nicht, Google Play Services und Google Support Library in Android SDK Manager herunterzuladen, in dem Sie Ihre Play-Service-Versionen finden können.

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

Ich habe maximumAge: 3600000 auf Android entfernt und es funktioniert

3
Vinh Thai

Es ist möglich, dass Sie sich im Gebäude oder im Büro befinden und Ihr Signal ist nicht so gut. Ich habe mit vielen Konfigurationen versucht und diese passt am besten zu mir:

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

Oder versuchen Sie, das Timeout zu erhöhen. Da für mich die üblichen 2000ms nicht funktionierten, bekam ich ständig "Standortanfrage abgelaufen". Deaktivieren Sie also hohe Genauigkeit, erhöhen Sie das Zeitlimit, und Sie können loslegen.

3
dexter

Hallo, ich stand vor dem gleichen Problem "Request Time Out" . Ich habe jede mögliche Lösung ausprobiert, die ich gefunden habe, aber die konnte für mich nicht funktionieren, aber kürzlich habe ich ein Modul gefunden, das dieses Problem überwindet. reag-native-geolocation-service Dies funktionierte für mich .....

2

Ich habe verschiedene Methoden und NPM-Module ausprobiert. Schließlich wurde dieses Problem mit diesem Modul gelöst. Ich empfehle dringend diesen . https://www.npmjs.com/package/react-native-geolocation-service

0

Arbeiten {enableHighAccuracy: false, Timeout: 5000, maximumAge: 10000},

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />

Erlaubnis in P-Liste und Android Manifest auch hinzufügen  

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

Ich habe die App per Standortanfrage gemacht. Der Befehl
{ enableHighAccuracy: true, timeout: 25000, maximumAge: 3600000 }, funktioniert unter iOS, aber nicht unter Android. Ich denke, du solltest Platform überprüfen.

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  }
        );
0
Tuan Nguyen