Flutter-geolocator: Android Pie (API 28) Geolocator().getCurrentPosition() gibt nicht zurück

Erstellt am 2. Nov. 2018  ·  39Kommentare  ·  Quelle: Baseflow/flutter-geolocator

🐛 Fehlerbericht

Wenn ich Geolocator () .getCurrentPosition () auf dem Android-Emulator mit dem Aufruf von Android Pie (API 28) ausführe, wird überhaupt nicht zurückgegeben.

Ich führe den gleichen Code für API 27-Standortrückgaben aus. Ich habe versucht, einen neuen Emulator zu erstellen, es ändert sich nichts.

Aufbau

Android-Emulator mit Android Pie (API 28)

Version: 2.1.0

Plattform:

  • [ ] :iphone: iOS
  • [X] :Roboter: Android
android

Hilfreichster Kommentar

Ich habe das gleiche Problem und habe eine Zeitüberschreitung eingestellt. Wenn ein Timeout aufgetreten ist, rufe ich getLastKnownPosition() auf

Geolocator().getCurrentPosition().timeout(Duration(seconds: 10)).then((position) {
      //getting position without problems
      print(position);
    }).catchError((error) {
      if (error is TimeoutException) {
        Geolocator().getLastKnownPosition().then((position) {
          //getting last known position
          print(position);
        }).catchError((error) {
          //handle the exception
        });
      } else {
        //handle the exception
      }
    });

Das gleiche könntest du auch mit stream machen

Alle 39 Kommentare

ich auch, was ist los? :(

Hier gilt das gleiche!

@savjolovs Wenn ich

Das gleiche Verhalten hier, bis einige Koordinaten mit erweiterten Steuerelementen gedrückt werden.
Gleiches Verhalten mit einem von zwei physischen Geräten. Zuerst mit Android 5 - funktioniert gut, ein anderer mit 6 - keine Reaktion, bis der Standort des gefälschten GPS aktiviert ist.

+1 hier

Jemand eine Idee was die Ursache ist? Diese Funktion macht alles kaputt, hat jemand ein anderes Plugin ausprobiert?

Um das Offensichtliche zu überprüfen, haben Sie für diejenigen mit dem Problem ein GPS-Signal, um einen Standort zu ermitteln und sind umgezogen? Fragst du dich nur, ob es dort sitzt und auf einen neuen Standort wartet, bevor es aktualisiert wird?

@ibrierley scheint kein GPS-Signal mit oder ohne Bewegung zu erhalten, aber gleichzeitig haben verschiedene Apps wie Google Maps keine Probleme, die aktuelle Position zu lokalisieren. lastKnownPosition gibt den Standort für etwa ein paar hundert Meter zurück. Mit Android 5 habe ich überhaupt keine Probleme, sogar nicht nach der Standorterlaubnis gefragt (aber nicht sicher, vielleicht habe ich das beim Debuggen übersehen)

Dieselben Probleme bei Android oreo, außer dass Sie die App schließen und erneut öffnen

Ich habe mit einer Android Wear-Uhr herumgefummelt und hatte viele Probleme mit GPS, aber es scheint, als ob es meistens funktioniert (es kann nach langer Zeit eine Zeitüberschreitung haben, aber ich denke, das ist ein anderes Problem).

Ich bin mir nicht sicher, was genau funktioniert, da ich viele Dinge ausprobiert habe, aber vielleicht kann jemand diese überprüfen und sehen, ob sie helfen.

0) Stellen Sie sicher, dass Ihr Gerät ein GPS-Signal empfangen kann, also außerhalb oder füttere es über den Emulator (ich füttere es mit einer GPX-Route, die ich zum Testen heruntergeladen habe).

1) Stellen Sie sicher, dass der Bildschirm eingeschaltet ist. GPS liefert möglicherweise keine Ergebnisse mehr, wenn es sich im minimalen Modus befindet, wie auch immer es heißt. Ich erzwinge den Bildschirm bei Bedarf mit dem Screen-Paket und Screen.keepOn(true); Wenn der Bildschirm ausgeschaltet ist, scheint er eine Reihe von Standorten zu halten und zu puffern, bis der Bildschirm wieder eingeschaltet ist.

2) Dies sind meine Berechtigungen in AndroidManifest.xml, vielleicht einen Versuch wert

```




Beachten Sie vor allem die letzte, da ich denke, dass es in einer Version eine Änderung gab, die zu helfen schien. Möglicherweise möchten Sie Wake_lock aus Batteriegründen nicht, aber es kann nützlich sein, dies zu versuchen, um das Problem zu beseitigen.

3) Ich hatte Merkwürdigkeiten mit dem Stream-Timeout, also habe ich den Stream mit geolocator.getPositionStream gestartet, aber nicht wirklich verwendet. Während der Stream läuft, rufe ich getCurrentPosition( wünschenswertAccuracy: LocationAccuracy.high ) basierend auf einem Timer auf. Ich denke, dies ist jetzt nicht erforderlich, da mein ursprüngliches Problem darin bestand, dass der Bildschirm ausgeschaltet war, aber es kann sich lohnen, es nur aus Interesse zu versuchen.

Wenn jemand das oben genannte versucht und es nicht zum Laufen bringt, können Sie eine minimale Flatter-App erstellen, nur mit dem Standortmaterial, und ich werde sehen, ob es bei mir genauso fehlschlägt. Es ist viel schmerzhafter, loszulegen, als es sollte :/.

Danke @ibrierley für deine Informationen, werde es so schnell wie möglich versuchen und über meine Erfahrungen bei der Lösung des Problems berichten.

Habe heute mit zusätzlichen Tools wie GPS-Test auf physischen Geräten recherchiert.
Es gibt also keine Reaktion, wenn der GPS-Test nicht verfügbar ist (0 verbunden 1 verfügbar wegen Wolken und großen Gebäuden), sogar Google Map oder andere Kartendienste funktionieren.
Keine Reaktion, wenn Sat online ist, aber definierte Entfernung in den Standortoptionen, aber in diesem Fall nicht 100% - benötigen Sie eine Art GPS-Drift, um die Anfangskoordinaten zu erhalten.
Ich habe einen Trick mit lastknownlocation gemacht, um dort eine Position zu platzieren, um eine App zu starten, die den aktuellen Standort erfordert, bevor die tatsächlichen Standortdaten verfügbar sind.
Wahrscheinlich wäre es eine großartige Lösung, eine Art Flag wie isReady mit einem möglichen Rückruf im Geolocator zu haben, der anzeigt, dass der GPS-Dienst bereit ist, Standortdaten per Stream anzubieten.

Hat jemand zum Beispiel dies versucht: https://github.com/Lyokone/flutterlocation , oder dies: https://github.com/Lyokone/flutterlocation ? So können wir Fehler ausschließen, die nicht mit diesem Paket zusammenhängen.

Ich habe das versucht und bin bei diesem gelandet (das heißt nicht, dass es nicht so ist
einen Versuch wert!). Alle haben 'einige' Probleme, glaube ich wirklich
weil Android einige Dinge hat, die nicht offensichtlich sind.

Normalerweise habe ich festgestellt, dass ein Standort auf keinem der zurückgegeben wird
Pakete), liegt es an einem Problem, das nicht flattert (z. B. das GPS ist in
Ruhemodus oder kein GPS-Signal).

Am Do., 15. Nov. 2018 um 19:26 Uhr HerrNiklasRaab [email protected]
schrieb:

Hat jemand zum Beispiel das probiert:
https://github.com/Lyokone/flutterlocation oder dies:
https://github.com/Lyokone/flutterlocation ? So können wir Fehler ausschließen, die
beziehen sich nicht auf dieses Paket.


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439160446 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/ADuG9WRbZuJYvi5N_2xrrku-Jurk6trIks5uvb_SgaJpZM4YKDSm
.

Versucht jemand meinen?
flatter_background_geolocation

Funktioniert es aus Interesse mit ausgeschaltetem Bildschirm?

Am Do, 15. November 2018 um 20:16 Uhr Chris Scott [email protected]
schrieb:

Versucht jemand meinen?
flatter_background_geolocation
https://pub.dartlang.org/packages/flutter_background_geolocation#-readme-tab-


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439175841 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/ADuG9f5uvZK0lDnYecMoFZhJnF0ylz6Pks5uvcuygaJpZM4YKDSm
.

Es funktioniert auch, wenn Sie Ihre App beenden ( stopOnTerminate: false ) oder das Gerät neu starten ( startOnBoot: true ).

Ich stehe vor dem gleichen Problem, das nie von getCurrentPosition .
Ich habe folgenden Code:
position = await Geolocator() .getCurrentPosition(desiredAccuracy: LocationAccuracy.best); setState(() { _position = position; }); if (position == null) Fluttertoast.showToast( msg: 'Position is null', toastLength: Toast.LENGTH_SHORT); else Fluttertoast.showToast( msg: 'Got Position', toastLength: Toast.LENGTH_SHORT);

Die Berechtigungen sind:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.hardware.location.gps" /> <uses-permission android:name="android.hardware.location.network" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> .
Wenn ich das Programm starte, erscheint die Standortanzeige oben auf dem Bildschirm und bleibt stehen, bis ich das Programm schließe.
Irgendwelche Hilfe, bitte?

Ebenso funktioniert getCurrentPosition nicht mit API 23.
Irgendeine Lösung für dieses oder ein alternatives Paket, das zum Abrufen der aktuellen Position funktioniert?

Es ist ein bisschen schwierig. Ich könnte es jetzt zum Laufen bringen, indem ich zuerst die Google Map-App starte und sie um Erlaubnis zum Aktivieren von GPS bitten lasse, wenn ich auf meinen Standort tippe. Danach funktioniert getCurrentPosition plötzlich wie ein Zauber.

In meinem Fall kann ich den Standort mit keiner API abrufen. Ich bin mir nicht sicher, ob dies Ihre Probleme lösen kann, aber
Ich habe versucht, den NOT-Operator hier zu entfernen, die Anweisung return hinzugefügt und es hat funktioniert. https://github.com/BaseflowIT/flutter-geolocator/blob/master/android/src/main/java/com/baseflow/flutter/plugin/geolocator/tasks/LocationUpdatesUsingLocationManagerTask.java#L52

// If we are listening to multiple location updates we can go ahead
// and report back the last known location (if we have one).
if(mStopAfterFirstLocationUpdate && mBestLocation != null) {
reportLocationUpdate(mBestLocation);
return;
}

Ich bin gerade darüber gestolpert, da ich eine wirklich schnelle Lösung benötigte, nachdem ich ein anderes Plugin verwendet hatte, das mich in der Produktion im Stich ließ. Ich kann bestätigen, dass ich dies auf API 23 (physisches Gerät), API 24 (physisches Gerät) und API 28 (physisches Gerät) getestet habe und kein Problem damit hatte. Auf API 23 wurde ich gefragt, ob ich Google helfen möchte, den Standort usw. usw. zu verbessern, und sagte nur „Ja“, der Standort wurde nach ungefähr 20 Sekunden geladen. In der Vergangenheit hatte ich echte Probleme, Emulatoren dazu zu bringen, Standorte zurückzugeben (native Android-Entwicklung), könnte es also nur ein Emulatorproblem sein?

Ich habe das gleiche Problem und habe eine Zeitüberschreitung eingestellt. Wenn ein Timeout aufgetreten ist, rufe ich getLastKnownPosition() auf

Geolocator().getCurrentPosition().timeout(Duration(seconds: 10)).then((position) {
      //getting position without problems
      print(position);
    }).catchError((error) {
      if (error is TimeoutException) {
        Geolocator().getLastKnownPosition().then((position) {
          //getting last known position
          print(position);
        }).catchError((error) {
          //handle the exception
        });
      } else {
        //handle the exception
      }
    });

Das gleiche könntest du auch mit stream machen

@NMateu Danke für deinen Beitrag. Das war sehr hilfreich!

Ich hatte das gleiche Problem mit dem Emulator, aber .forceAndroidLocationManager = true; es für mich behoben. Scheint, dass der fusionierte Standortmanager manchmal im Weg steht.

Gibt es darüber irgendwelche Neuigkeiten?

Hat es jemand geschafft das Problem zu lösen? Ich muss das wirklich erledigen, Leute!

Das gleiche Problem, es funktioniert gut auf iOS-Geräten, kann aber heutzutage den Standort auf Android nicht abrufen.

Ja, ich kann die Adresse tatsächlich mit der Platzierungsmethode placemarkFromAddress abrufen. Aber der Standort selbst ist kaputt.

gleiches Problem hier

void _getUserLocation() async {
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = erwarten geolocator.checkGeolocationPermissionStatus();
Position positionieren = auf Geolocator() warten
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
Aufführenplacemark = erwarten Geolocator()
.placemarkFromCoordinates(position.latitude, position.longitude);
drucken("-----------------");
print(placemark[0].position);
print(geolocator.toString());
print(geolocationStatus.toString());
setState(() {
_initialPosition = LatLng(position.latitude, position.longitude);

  locationController.text = placemark[0].name;
});

}

es zeigt die falsche Position an.

I/Flattern ( 7363): Breite: 37.421999899999996, Länge: -122.08405750000001
I/flattern ( 7363): Instanz von 'Geolocator'
I/flattern ( 7363): GeolocationStatus.granted

void _getUserLocation() async {
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = erwarten geolocator.checkGeolocationPermissionStatus();
Position positionieren = auf Geolocator() warten
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
Ortsmarke auflisten = Geolocator() erwarten
.placemarkFromCoordinates(position.latitude, position.longitude);
drucken("-----------------");
print(placemark[0].position);
print(geolocator.toString());
print(geolocationStatus.toString());
setState(() {
_initialPosition = LatLng(position.latitude, position.longitude);

  locationController.text = placemark[0].name;
});

}

Funktioniert auf Emulator mit diesem Snippet
Geolocator()..forceAndroidLocationManager = true;

Dieses Paket funktionierte wie ein Zauber für alles

(https://github.com/alfanhui/new_geolocation)

Ich hatte das gleiche Problem mit einigen Android-Geräten. Aber ich habe eine Lösung dafür gefunden -

Sie müssen lediglich den Wert von Geolocator()..forceAndroidLocationManager = true setzen.

finaler Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;

Gelöst in Version 6.0.0

Position positionieren = warten Geolocator.getCurrentPosition(
gewünschteGenauigkeit: LocationAccuracy.low,forceAndroidLocationManager: true);
Es hat meine Probleme behoben

Ich erhalte einen Fehler in der Zeile forceAndroidLocationManager, es wird eine rote Linie angezeigt und der Fehler ist, dass ....."Der Setter 'forceAndroidLocationManager' ist nicht für den Typ 'Geolocator' definiert.
Versuchen Sie, die Bibliothek zu importieren, die 'forceAndroidLocationManager' definiert, den Namen auf den Namen eines vorhandenen Setters zu korrigieren oder einen Setter oder ein Feld mit dem Namen 'forceAndroidLocationManager' zu definieren.".........plss kann mir jemand dabei helfen

@aditikumar-png welche Version des Geolocators verwendest du? Sie haben wahrscheinlich vor kurzem auf Version 6.x aktualisiert. Diese Version hat eine bahnbrechende Änderung. Wir haben die Eigenschaft Geolocator().forceAndroidLocationManager in einen benannten Parameter der Methoden getCurrentPosition und getPositionStream verschoben.

Das bedeutet, dass Sie den Geolocator jetzt wie folgt verwenden können:

final position = await Geolocator.getCurrentPosition(forceAndroidLocationManager: true);

statt alt:

final geolocator = Geolocator();
geolocator.forceAndroidLocationManager = true;

final position = await geolocator.getCurrentPosition();

@aditikumar-png welche Version des Geolocators verwendest du? Sie haben wahrscheinlich vor kurzem auf Version 6.x aktualisiert. Diese Version hat eine bahnbrechende Änderung. Wir haben die Eigenschaft Geolocator().forceAndroidLocationManager in einen benannten Parameter der Methoden getCurrentPosition und getPositionStream verschoben.

Das bedeutet, dass Sie den Geolocator jetzt wie folgt verwenden können:

final position = await Geolocator.getCurrentPosition(forceAndroidLocationManager: true);

statt alt:

final geolocator = Geolocator();
geolocator.forceAndroidLocationManager = true;

final position = await geolocator.getCurrentPosition();

Ich danke dir sehr!!!!! du hast mein problem in sekunden gelöst, ich hatte seit 9 stunden damit zu kämpfen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen