Flutter-geolocator: Android Pie (API 28) Geolocator().getCurrentPosition() ne renvoie pas

Créé le 2 nov. 2018  ·  39Commentaires  ·  Source: Baseflow/flutter-geolocator

Rapport de bogue

Lorsque j'exécute Geolocator().getCurrentPosition() sur l'émulateur Android avec Android Pie (API 28), l'appel ne revient pas du tout.

J'exécute le même code sur l'emplacement de l'API 27, les retours sont corrects. J'ai essayé de créer un nouvel émulateur, rien ne change.

Configuration

Émulateur Android avec Android Pie (API 28)

Version : 2.1.0

Plate-forme:

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

Commentaire le plus utile

J'ai le même problème et j'ai mis un délai d'attente pour fonctionner. Lorsque le délai d'attente s'est produit, j'appelle getLastKnownPosition()

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

Vous pouvez également faire la même chose avec stream

Tous les 39 commentaires

moi aussi, qu'est-ce qui ne va pas ? :(

Pareil ici!

@savjolovs si je

Même comportement ici jusqu'à ce que certaines coordonnées soient poussées à l'aide de contrôles étendus.
Même comportement avec l'un des deux appareils physiques. D'abord avec Android 5 - fonctionne bien, un autre avec 6 - aucune réponse jusqu'à ce que l'emplacement fakegps soit engagé.

+1 ici

Quelqu'un a une idée de la cause ? Cette fonctionnalité casse tout, est-ce que quelqu'un a essayé un autre plugin ?

En vérifiant l'évidence, pour ceux qui ont le problème, avez-vous un signal gps pour qu'il se positionne et se soit déplacé ? Vous vous demandez simplement s'il est assis là en attendant un nouvel emplacement avant de se mettre à jour ?

@ibrierley semble ne pas pouvoir obtenir de signal GPS avec ou sans déplacement, mais en même temps, différentes applications comme Google Maps n'ont aucun problème pour localiser la position actuelle. lastKnownPosition renvoie l'emplacement à environ quelques centaines de mètres. Avec Android 5, je n'ai aucun problème, même pas demandé l'autorisation de localisation (mais pas sûr, peut-être que j'ai raté cela au débogage)

Mêmes problèmes sur Android oreo, sauf que vous fermez et ouvrez à nouveau l'application

J'ai joué avec une montre Android Wear et j'ai eu beaucoup de problèmes avec le GPS, mais il semble que cela fonctionne principalement (il peut expirer après un long moment, mais je pense que c'est un problème différent).

Je ne sais pas exactement ce qui l'a fait fonctionner, car j'ai essayé beaucoup de choses, mais peut-être que quelqu'un peut les vérifier et voir si elles aident.

0) Assurez-vous que votre appareil peut recevoir un signal GPS, donc à l'extérieur ou alimentez-le via l'émulateur (je lui alimente un itinéraire GPX que j'ai téléchargé pour tester).

1) Assurez-vous que l'écran est allumé. Le GPS peut cesser de renvoyer des résultats s'il est en mode minimal, quel que soit son nom. Je force l'écran à s'allumer en cas de besoin avec Screen package et Screen.keepOn(true); Si l'écran est éteint, il semble conserver et mettre en mémoire tampon un ensemble d'emplacements jusqu'à ce que l'écran soit rallumé.

2) Ce sont mes autorisations dans AndroidManifest.xml, ça vaut peut-être la peine d'essayer

```




Notez en particulier la toute dernière, car je pense qu'il y a eu un changement en cours de route dans une version, et cela a semblé aider. Vous ne voudrez peut-être pas le wake_lock pour des raisons de batterie, mais il peut être utile d'essayer cela pour éliminer le problème.

3) J'ai eu des bizarreries avec le délai d'expiration du flux, j'ai donc fini par démarrer le flux avec geolocator.getPositionStream mais sans l'utiliser réellement. Avec le flux en cours d'exécution, j'appelle getCurrentPosition( desireAccuracy: LocationAccuracy.high ) en fonction d'une minuterie. Je pense que ce n'est pas nécessaire maintenant, car je pense que mon problème d'origine était que l'écran était éteint, mais cela peut valoir la peine d'essayer juste par intérêt.

Si quelqu'un essaie ce qui précède et ne peut pas le faire fonctionner, pouvez-vous créer une application de flutter minimale, juste avec les éléments de localisation, et je verrai si cela échoue de la même manière sur la mienne. C'est beaucoup plus douloureux d'y aller qu'il ne le devrait :/.

Merci @ibrierley pour vos informations, j'essaierai dès que possible et je

J'ai fait des recherches aujourd'hui avec des outils supplémentaires comme le test GPS sur des appareils physiques.
Donc, il n'y a pas de réponse lorsque sat n'est pas disponible par test GPS (0 connecté 1 disponible à cause des nuages ​​et des grands bâtiments autour), même google map ou d'autres services de carte fonctionnent.
Pas de réponse lorsque sat est en ligne mais distance définie dans les options de localisation, mais pas à 100% dans ce cas - besoin d'une sorte de dérive GPS pour avoir des coordonnées initiales.
J'ai fait une astuce avec lastknownlocation pour me positionner là-bas pour lancer une application qui nécessite l'emplacement actuel avant que les données de localisation réelles ne soient disponibles.
Ce serait probablement une excellente solution d'avoir une sorte de drapeau comme isReady avec un rappel possible dans le géolocalisateur qui indique que le service GPS est prêt à offrir des données de localisation via le flux.

Quelqu'un a-t-il essayé par exemple ceci : https://github.com/Lyokone/flutterlocation , ou ceci : https://github.com/Lyokone/flutterlocation ? Nous pouvons donc exclure les erreurs qui ne sont pas liées à ce package.

J'ai essayé ça, et j'ai fini avec celui-ci (cela ne veut pas dire que ce n'est pas
ça vaut le coup d'essayer!). Tous ont 'quelques' problèmes, je pense vraiment
car Android a des choses qui ne sont pas évidentes.

En règle générale, j'ai trouvé lorsqu'un emplacement n'est renvoyé sur aucun des
packages), c'est à cause d'un problème d'absence de flottement (par exemple, le GPS est entré dans
mode veille ou pas de signal GPS).

Le jeu. 15 novembre 2018 à 19:26 HerrNiklasRaab [email protected]
a écrit:

Est-ce que quelqu'un a essayé par exemple ceci :
https://github.com/Lyokone/flutterlocation , ou ceci :
https://github.com/Lyokone/flutterlocation ? Nous pouvons donc exclure les erreurs qui
ne sont pas liés à ce package.

-
Vous recevez ceci parce que vous avez été mentionné.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439160446 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ADuG9WRbZuJYvi5N_2xrrku-Jurk6trIks5uvb_SgaJpZM4YKDSm
.

Quelqu'un a essayé le mien ?
flutter_background_geolocation

Est-ce que ça marche avec l'écran éteint par intérêt ?

Le jeu. 15 novembre 2018 à 20:16 Chris Scott [email protected]
a écrit:

Quelqu'un a essayé le mien ?
flutter_background_geolocation
https://pub.dartlang.org/packages/flutter_background_geolocation#-readme-tab-

-
Vous recevez ceci parce que vous avez été mentionné.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439175841 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ADuG9f5uvZK0lDnYecMoFZhJnF0ylz6Pks5uvcuygaJpZM4YKDSm
.

Cela fonctionne même si vous mettez fin à votre application ( stopOnTerminate: false ) ou redémarrez l'appareil ( startOnBoot: true ).

Je suis confronté au même problème, qui ne revient jamais de getCurrentPosition .
J'ai le code suivant:
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);

Les autorisations sont :
<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" /> .
Lorsque j'exécute le programme, l'indicateur d'emplacement apparaît en haut de l'écran et reste immobile jusqu'à ce que je ferme le programme.
De l'aide, s'il vous plaît ?

Même chose, getCurrentPosition ne fonctionne pas avec l'API 23.
Une solution pour cela ou tout autre package fonctionnant pour obtenir la position actuelle ?

C'est un peu délicat. Je pourrais le faire fonctionner maintenant en lançant d'abord l'application Google Map et en la laissant demander la permission d'activer le GPS lorsque vous appuyez sur ma position. Après cela, getCurrentPosition fonctionne soudainement comme un charme.

Dans mon cas, je ne peux récupérer l'emplacement avec aucune API, je ne sais pas si cela peut résoudre vos problèmes mais
J'ai essayé de supprimer l'opérateur NOT ici, j'ai ajouté l'instruction return et cela a fonctionné. 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;
}

Je suis juste tombé sur cela car j'avais besoin d'une solution très rapide après avoir utilisé un autre plugin qui m'a laissé tomber en production. Je peux confirmer que j'ai testé cela sur API 23 (périphérique physique), API 24 (périphérique physique) et API 28 (périphérique physique) et que je n'ai eu aucun problème avec cela. Sur l'API 23, on m'a demandé si je voulais aider Google à améliorer l'emplacement, etc., et j'ai simplement dit oui, il a chargé l'emplacement après environ 20 secondes environ. Dans le passé, j'ai eu de réels problèmes pour que les émulateurs renvoient des emplacements (développement Android natif), alors cela pourrait-il simplement être un problème d'émulateur ?

J'ai le même problème et j'ai mis un délai d'attente pour fonctionner. Lorsque le délai d'attente s'est produit, j'appelle getLastKnownPosition()

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

Vous pouvez également faire la même chose avec stream

@NMateu Merci pour votre contribution. C'était très utile !

J'ai eu le même problème sur l'émulateur, mais .forceAndroidLocationManager = true; résolu pour moi. Il semble que le gestionnaire de site fusionné gêne parfois.

des nouvelles à ce sujet?

Quelqu'un a-t-il réussi à résoudre le problème ? J'ai vraiment besoin de faire ça, les gars!

Le même problème, cela fonctionne bien sur l'appareil ios, mais ne peut pas obtenir l'emplacement sur Android ces jours-ci.

oui, je peux en fait obtenir l'adresse avec la méthode de placement placemarkFromAddress . Mais l'emplacement lui-même est cassé.

même problème ici

void _getUserLocation() async {
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = wait geolocator.checkGeolocationPermissionStatus();
Position position = attendre Geolocator()
.getCurrentPosition(précision souhaitée : précision de l'emplacement.haut );
Listerplacemark = attendre Geolocator()
.placemarkFromCoordinates(position.latitude, position.longitude);
imprimer("-----------------");
print(placemark[0].position);
print(geolocator.toString());
print(geolocationStatus.toString());
setState(() {
_initialPosition = LatLng(position.latitude, position.longitude);

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

}

son montrant le mauvais emplacement.

I/flutter (7363): Lat: 37.4219998999999996, Long: -122.08405750000001
I/flutter ( 7363): Instance de 'Geolocator'
I/flutter ( 7363): GeolocationStatus.granted

void _getUserLocation() async {
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = wait geolocator.checkGeolocationPermissionStatus();
Position position = attendre Geolocator()
.getCurrentPosition(précision souhaitée : précision de l'emplacement.haut );
Repérer la liste = attendre Geolocator()
.placemarkFromCoordinates(position.latitude, position.longitude);
imprimer("-----------------");
print(placemark[0].position);
print(geolocator.toString());
print(geolocationStatus.toString());
setState(() {
_initialPosition = LatLng(position.latitude, position.longitude);

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

}

Fonctionne sur émulateur avec cet extrait
Geolocator()..forceAndroidLocationManager = true;

Ce paquet a fonctionné comme du charme pour tout

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

J'étais confronté au même problème avec quelques appareils Android. Mais j'ai trouvé une solution pour cela -

Tout ce que vous avez à faire est de définir la valeur de Geolocator()..forceAndroidLocationManager = true.

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

Résolu dans la version 6.0.0

Position position = wait Geolocator.getCurrentPosition(
desireAccuracy: LocationAccuracy.low,forceAndroidLocationManager: true);
ça a réglé mes problèmes

J'obtiens une erreur dans la ligne forceAndroidLocationManager, sa ligne rouge s'affiche et l'erreur est que ....." Le setter 'forceAndroidLocationManager' n'est pas défini pour le type 'Geolocator'.
Essayez d'importer la bibliothèque qui définit 'forceAndroidLocationManager', en corrigeant le nom par le nom d'un setter existant, ou en définissant un setter ou un champ nommé 'forceAndroidLocationManager'."

@aditikumar-png quelle version du géolocalisateur utilisez-vous ? Vous avez probablement mis à jour la version 6.x récemment. Cette version a un changement de rupture. Nous avons déplacé la propriété Geolocator().forceAndroidLocationManager vers un paramètre nommé sur les méthodes getCurrentPosition et getPositionStream .

Cela signifie que vous pouvez maintenant utiliser le géolocalisateur comme ceci :

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

au lieu de l'ancien :

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

final position = await geolocator.getCurrentPosition();

@aditikumar-png quelle version du géolocalisateur utilisez-vous ? Vous avez probablement mis à jour la version 6.x récemment. Cette version a un changement de rupture. Nous avons déplacé la propriété Geolocator().forceAndroidLocationManager vers un paramètre nommé sur les méthodes getCurrentPosition et getPositionStream .

Cela signifie que vous pouvez maintenant utiliser le géolocalisateur comme ceci :

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

au lieu de l'ancien :

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

final position = await geolocator.getCurrentPosition();

Merci beaucoup!!!!! tu as résolu mon problème en quelques secondes je me débattais avec ça depuis 9 heures

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

lqmminh picture lqmminh  ·  6Commentaires

estevez-dev picture estevez-dev  ·  6Commentaires

samo92 picture samo92  ·  6Commentaires

jaumard picture jaumard  ·  3Commentaires

prasant10050 picture prasant10050  ·  6Commentaires