Flutter-geolocator: Android Pie (API 28) Geolocator (). GetCurrentPosition () no devuelve

Creado en 2 nov. 2018  ·  39Comentarios  ·  Fuente: Baseflow/flutter-geolocator

🐛 Informe de error

Cuando ejecuto Geolocator (). GetCurrentPosition () en el emulador de Android con Android Pie (API 28), la llamada no regresa en absoluto.

Ejecuto el mismo código en la ubicación de la API 27 y devuelve bien. Intenté crear un nuevo emulador, nada cambia.

Configuración

Emulador de Android con Android Pie (API 28)

Versión: 2.1.0

Plataforma:

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

Comentario más útil

Tengo el mismo problema y configuré un tiempo de espera para que funcione. Cuando se agotó el tiempo de espera, llamo a 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
      }
    });

También puedes hacer lo mismo con stream.

Todos 39 comentarios

yo también, ¿qué pasa? :(

¡Aquí igual!

@savjolovs si

El mismo comportamiento aquí hasta que empuje algunas coordenadas usando controles extendidos.
Mismo comportamiento con uno de los dos dispositivos físicos. Primero con Android 5: funciona bien, otro con 6: no hay respuesta hasta que se activa la ubicación de fakegps.

+1 aquí

Alguien tiene una idea de cuál es la causa? Esta característica lo está rompiendo todo, ¿alguien probó otro complemento?

Verificando lo obvio, para aquellos con el problema, ¿tienen una señal gps para que obtenga una ubicación y se hayan mudado? ¿Me pregunto si está allí esperando una nueva ubicación antes de que se actualice?

@ibrierley parece que no puede obtener la señal de GPS con o sin moverse, pero al mismo tiempo, diferentes aplicaciones como Google Maps no tienen problemas para ubicar la posición actual. lastKnownPosition devuelve la ubicación a unos doscientos metros de distancia. Con Android 5 no tengo ningún problema, ni siquiera se me pidió el permiso de ubicación (pero no estoy seguro, es posible que me lo haya perdido en la depuración)

Los mismos problemas en Android Oreo, excepto que cierras y vuelves a abrir la aplicación

Estuve jugando con un reloj Android Wear y tuve muchos problemas con el GPS, pero parece que funciona principalmente (puede agotarse después de mucho tiempo, pero creo que es un problema diferente).

No estoy seguro de qué es exactamente lo que lo ha hecho funcionar, ya que he probado muchas cosas, pero tal vez alguien pueda marcarlas y ver si ayudan.

0) Asegúrese de que su dispositivo pueda obtener una señal de GPS, por lo tanto, afuera o aliméntelo a través del emulador (le doy una ruta GPX que descargué para probar).

1) Asegúrese de que la pantalla esté encendida. El GPS puede dejar de devolver resultados si está en modo mínimo como se llame. Obligo la pantalla cuando es necesario con el paquete Screen y Screen.keepOn (verdadero); Si la pantalla está apagada, parece retener y almacenar en búfer un conjunto de ubicaciones hasta que la pantalla vuelve a encenderse.

2) Estos son mis permisos en AndroidManifest.xml, tal vez valga la pena intentarlo

''




Tenga en cuenta especialmente el último, ya que creo que hubo un cambio en el camino en una versión, y pareció ayudar. Es posible que no desee el wake_lock por razones de batería, pero puede ser útil intentarlo para eliminar dónde está el problema.

3) Tuve rarezas con el tiempo de espera de la transmisión, por lo que terminé comenzando la transmisión con geolocator.getPositionStream pero en realidad no lo usé. Con la transmisión en ejecución, estoy llamando a getCurrentPosition (deseadoAccuracy: LocationAccuracy.high) en función de un temporizador. Creo que esto no es necesario ahora, ya que creo que mi problema original era que la pantalla estaba apagada, pero puede valer la pena intentarlo solo por interés.

Si alguien intenta lo anterior y no puede hacer que funcione, ¿puedes crear una aplicación de aleteo mínima, solo con las cosas de ubicación, y veré si falla lo mismo en la mía? Es mucho más doloroso ponerse en marcha de lo que debería: /.

Gracias @ibrierley por tu información, lo intentaré lo antes posible e informaré sobre mi experiencia resolviendo el problema.

Hice algunas investigaciones hoy con herramientas adicionales como la prueba de GPS en dispositivos físicos.
Por lo tanto, no hay respuesta cuando el satélite no está disponible mediante la prueba de GPS (0 conectado 1 disponible debido a las nubes y los grandes edificios alrededor), incluso el mapa de Google u otros servicios de mapas funcionan.
No hay respuesta cuando el satélite está en línea, pero la distancia definida en las opciones de ubicación, pero no al 100% en este caso; se necesita algún tipo de deriva de GPS para tener coordenadas iniciales.
Hice un truco con la última ubicación conocida para colocarme allí para iniciar la aplicación que requiere la ubicación actual antes de que los datos de ubicación reales estén disponibles.
Probablemente sería una gran solución tener algún tipo de bandera como isReady con una posible devolución de llamada en el geolocalizador que indique que el servicio GPS está listo para ofrecer datos de ubicación a través de la transmisión.

¿Alguien ha probado, por ejemplo, esto: https://github.com/Lyokone/flutterlocation , o esto: https://github.com/Lyokone/flutterlocation ? Entonces podemos excluir errores que no están relacionados con este paquete.

Lo intenté y terminé con este (eso no quiere decir que no sea
¡Vale la pena intentarlo!). Todos tienen 'algunos' problemas, creo que realmente
porque Android tiene algunas cosas que no son obvias.

Normalmente he encontrado cuando una ubicación no se devuelve en ninguno de los
paquetes), se debe a un problema de ausencia de aleteo (por ejemplo, el gps ha entrado en
modo de suspensión o sin señal gps).

El jueves, 15 de noviembre de 2018 a las 7:26 p.m. HerrNiklasRaab [email protected]
escribió:

Alguien ha intentado, por ejemplo, esto:
https://github.com/Lyokone/flutterlocation , o esto:
https://github.com/Lyokone/flutterlocation ? Entonces podemos excluir errores que
no están relacionados con este paquete.

-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439160446 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/ADuG9WRbZuJYvi5N_2xrrku-Jurk6trIks5uvb_SgaJpZM4YKDSm
.

¿Alguien prueba el mío?
flutter_background_geolocation

¿Funciona con la pantalla apagada por interés?

El jueves 15 de noviembre de 2018 a las 8:16 p. M. Chris Scott [email protected]
escribió:

¿Alguien prueba el mío?
flutter_background_geolocation
https://pub.dartlang.org/packages/flutter_background_geolocation#-readme-tab-

-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439175841 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/ADuG9f5uvZK0lDnYecMoFZhJnF0ylz6Pks5uvcuygaJpZM4YKDSm
.

Funciona incluso si finaliza su aplicación ( stopOnTerminate: false ) o reinicia el dispositivo ( startOnBoot: true ).

Estoy enfrentando el mismo problema, que nunca regresa de getCurrentPosition .
Tengo el siguiente código:
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);

Los permisos son:
<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" /> .
Cuando ejecuto el programa, el indicador de ubicación aparece en la parte superior de la pantalla y permanece quieto hasta que cierro el programa.
¿Alguna ayuda, por favor?

Lo mismo sucede, getCurrentPosition no funciona con API 23.
¿Alguna solución para este o cualquier paquete alternativo que funcione para obtener la posición actual?

Es un poco complicado. Podría hacerlo funcionar ahora iniciando la aplicación Google Map primero y dejar que pida permiso para habilitar el GPS cuando toque mi ubicación. Después de eso, getCurrentPosition de repente funciona como un encanto.

En mi caso, no puedo recuperar la ubicación con ninguna API, no estoy seguro de si esto puede resolver sus problemas, pero
Intenté eliminar el operador NOT aquí, agregué return declaración y funcionó. 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;
}

Me encontré con esto porque necesitaba una solución realmente rápida después de usar otro complemento que me decepcionó en la producción. Puedo confirmar que probé esto en API 23 (dispositivo físico), API 24 (dispositivo físico) y API 28 (dispositivo físico) y no tuve ningún problema. En API 23 me preguntaron si quería ayudar a Google a mejorar la ubicación, etc., etc. y simplemente dije que sí, cargó la ubicación después de aproximadamente 20 segundos. En el pasado, tuve problemas reales para que los emuladores devolvieran ubicaciones (desarrollo nativo de Android), así que ¿podría ser solo un problema de emulador?

Tengo el mismo problema y configuré un tiempo de espera para que funcione. Cuando se agotó el tiempo de espera, llamo a 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
      }
    });

También puedes hacer lo mismo con stream.

@NMateu Gracias por tu contribución. ¡Eso fue muy útil!

Tuve el mismo problema en el emulador, pero .forceAndroidLocationManager = true; solucionó. Parece que el administrador de ubicación fusionado a veces se interpone.

¿Alguna noticia sobre esto?

¿Alguien logró resolver el problema? ¡Realmente necesito hacer esto, amigos!

El mismo problema, funciona bien en el dispositivo ios, pero no puede obtener la ubicación en Android en estos días.

sí, puedo obtener la dirección con el método de ubicación placemarkFromAddress . Pero la ubicación en sí está rota.

mismo problema aquí

void _getUserLocation () async {
Geolocator geolocator = Geolocator () .. forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = aguardar geolocator.checkGeolocationPermissionStatus ();
Posición posición = aguardar Geolocalizador ()
.getCurrentPosition (deseadaAccuracy: LocationAccuracy.high);
Listaplacemark = await Geolocator ()
.placemarkFromCoordinates (position.latitude, position.longitude);
impresión("-----------------");
imprimir (marca de posición [0] .posición);
imprimir (geolocator.toString ());
print (geolocationStatus.toString ());
setState (() {
_initialPosition = LatLng (position.latitude, position.longitude);

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

}

está mostrando la ubicación incorrecta.

I / aleteo (7363): Lat: 37.421999899999996, Long: -122.08405750000001
I / flutter (7363): instancia de 'Geolocalizador'
I / flutter (7363): GeolocationStatus.granted

void _getUserLocation () async {
Geolocator geolocator = Geolocator () .. forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = aguardar geolocator.checkGeolocationPermissionStatus ();
Posición posición = aguardar Geolocalizador ()
.getCurrentPosition (deseadaAccuracy: LocationAccuracy.high);
List placemark = await Geolocator ()
.placemarkFromCoordinates (position.latitude, position.longitude);
impresión("-----------------");
imprimir (marca de posición [0] .posición);
imprimir (geolocator.toString ());
print (geolocationStatus.toString ());
setState (() {
_initialPosition = LatLng (position.latitude, position.longitude);

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

}

Funciona en el emulador con este fragmento
Geolocator()..forceAndroidLocationManager = true;

Este paquete funcionó a la perfección para todo.

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

Estaba enfrentando el mismo problema con algunos dispositivos Android. Pero he encontrado una solución para ello.

Todo lo que necesita hacer es establecer el valor de Geolocator () .. forceAndroidLocationManager = true.

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

Resuelto en la versión 6.0.0

Posición posición = espera Geolocator.getCurrentPosition (
deseadaAccuracy: LocationAccuracy.low, forceAndroidLocationManager: true);
Arregló mis problemas

Recibo un error en la línea forceAndroidLocationManager, se muestra una línea roja y el error es que ... "El establecedor 'forceAndroidLocationManager' no está definido para el tipo 'Geolocator'.
Intente importar la biblioteca que define 'forceAndroidLocationManager', corrigiendo el nombre por el nombre de un establecedor existente, o definiendo un establecedor o campo llamado 'forceAndroidLocationManager'. "......... por favor, alguien me puede ayudar con esto

@ aditikumar-png ¿qué versión del geolocalizador estás usando? Probablemente actualizó a la versión 6.x recientemente. Esta versión tiene un cambio rotundo. Movimos la propiedad Geolocator().forceAndroidLocationManager a un parámetro con nombre en los métodos getCurrentPosition y getPositionStream .

Esto significa que ahora puede usar el geolocalizador de esta manera:

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

en lugar del viejo:

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

final position = await geolocator.getCurrentPosition();

@ aditikumar-png ¿qué versión del geolocalizador estás usando? Probablemente actualizó a la versión 6.x recientemente. Esta versión tiene un cambio rotundo. Movimos la propiedad Geolocator().forceAndroidLocationManager a un parámetro con nombre en los métodos getCurrentPosition y getPositionStream .

Esto significa que ahora puede usar el geolocalizador de esta manera:

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

en lugar del viejo:

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

final position = await geolocator.getCurrentPosition();

¡¡¡¡¡Muchas gracias!!!!! Resolviste mi problema en segundos. Estuve luchando con esto desde las 9 horas.

¿Fue útil esta página
0 / 5 - 0 calificaciones