Flutter-geolocator: Android: se niega CheckGeolocationPermissionStatus ejecutado por primera vez

Creado en 9 jul. 2020  ·  3Comentarios  ·  Fuente: Baseflow/flutter-geolocator

En la plataforma Android cuando ejecuto el Geolocator (). La función CheckGeolocationPermissionStatus () por primera vez se deniega a GeolocationStatus y no se solicita permiso al usuario. Pero en IOS, cuando llamo a la misma función por primera vez, el estado de geolocalización es desconocido, por lo tanto, sé que debo llamar a Geolocator (). GetCurrentPosition () para pedir permiso al usuario y devolver la ubicación si se concedió el permiso.

¿Hay alguna forma de pedir permiso al usuario en Android cuando llamo a checkGeolocationPermissionStatus por primera vez?

debajo de mi código:

Future<void> getLocation() async {
    try {

      var serviceEnabled = await  Geolocator().isLocationServiceEnabled();

      if (serviceEnabled) {
        var geolocationStatus =
            await Geolocator().checkGeolocationPermissionStatus();

        if (geolocationStatus == GeolocationStatus.granted || geolocationStatus == GeolocationStatus.unknown) {
          position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
          return;
        } 
      }
    } catch (e) {
      print(e);
    }
  }

Todos 3 comentarios

Parece que este administrador de complementos no está más interesado en mantener o apoyar a su comunidad, vi muchos problemas pero no una solución precisa o de corrección de errores para ellos.

¡Si, tienes razón! También vi otros problemas sin respuestas. = /

@azeemgujjar , @ CNogueira92 , este no es el caso. De hecho, estoy trabajando duro en una próxima versión importante, pero como la mayoría de los proyectos de OSS, necesito hacer esto en mi tiempo libre, que en este momento es un poco limitado, por lo que mi atención está un poco dividida. Por supuesto, agradezco las contribuciones al complemento para ayudar.

Para responder a su pregunta @ CNogueira92 , Android e iOS manejan los permisos de manera un poco diferente. De forma predeterminada, Android trata los permisos como "denegados" (incluso cuando el usuario no los ha negado explícitamente). iOS tiene un estado específico para la situación en la que aún no se han solicitado permisos (llamado "No determinado", que traducimos como "desconocido").

En ambas plataformas está bien solicitar permisos cuando checkGeolocationPermissionStatus devuelve denied o unknown . Si el usuario ha seleccionado la opción "Denegado y no volver a preguntar", el Geolocalizador lo notará y no solicitará permisos.

En realidad, ni siquiera tiene que verificar manualmente los permisos, ya que el geolocalizador lo hará internamente. Para que pueda actualizar su código de manera segura a:

Future<void> getLocation() async {
    try {

      var serviceEnabled = await  Geolocator().isLocationServiceEnabled();

      if (serviceEnabled) {
        position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
      } else {
        // TODO: ask the user to enable the location services...   
      }
    } catch (e) {
      print(e);
    }
  }

El checkGeolocationPermissionStatus es solo un método conveniente en caso de que desee verificar los permisos manualmente e indicar al usuario que tome alguna acción. En la nueva versión que mencioné, también podrá solicitar permisos manualmente. Si desea hacer eso ahora, deberá realizar una llamada al complemento location_permissions que se envía con el geolocalizador. Puede encontrar más información sobre el complemento location_permissions aquí .

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