es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

FLUTTER LOCATION, Excepción no controlada: PlatformException(PERMISSION_DENIED_NEVER_ASK, Denegación perpetua de permiso de ubicación en segundo plano)

Estoy utilizando el paquete de flutter Location para acceder a la ubicación en segundo plano del usuario. La primera vez que un usuario abre la aplicación, se solicita permiso, y cuando el usuario lo acepta muestra este error en la consola:

Unhandled Exception: PlatformException(PERMISSION_DENIED_NEVER_ASK, Permiso de ubicación en segundo plano denegado para siempre - por favor, abre la configuración de la aplicación, null, null)

Si el usuario cierra la aplicación y la vuelve a abrir… funciona perfectamente bien (obtiene la ubicación tanto en primer plano como en segundo plano) sin solicitar el permiso de ubicación nuevamente.

Siguiendo la guía de inicio en el propio paquete, así es cómo agregué el permiso a mi archivo AndroidManifest.xml:


xml
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución al error “Permiso de ubicación en segundo plano denegado para siempre” en el paquete de ubicación de Flutter

    El error “Permiso de ubicación en segundo plano denegado para siempre” ocurre cuando el usuario ha denegado permanentemente la solicitud de permiso de ubicación para la aplicación. Este error se puede resolver pidiendo al usuario que habilite el permiso de ubicación desde la configuración de la aplicación.

    Para solicitar al usuario que habilite el permiso de ubicación, puedes utilizar el método openAppSettings() del paquete permission_handler. Esto abrirá la página de configuración de la aplicación, donde el usuario puede habilitar el permiso de ubicación.

    Aquí tienes un ejemplo de código para solicitar al usuario que habilite el permiso de ubicación:

    import 'package:location/location.dart';
    import 'package:permission_handler/permission_handler.dart';
    
    void getLocation() async {
      Location location = new Location();
      bool _serviceEnabled;
      PermissionStatus _permissionGranted;
    
      _serviceEnabled = await location.serviceEnabled();
      if (!_serviceEnabled) {
        _serviceEnabled = await location.requestService();
        if (!_serviceEnabled) {
          return;
        }
      }
    
      _permissionGranted = await location.hasPermission();
      if (_permissionGranted == PermissionStatus.denied) {
        _permissionGranted = await location.requestPermission();
        if (_permissionGranted != PermissionStatus.granted) {
          await openAppSettings();
          return;
        }
      }
    
      // Obtén la ubicación aquí
    }
    

    En este código, primero verificamos si el servicio de ubicación está habilitado o no. Si no está habilitado, solicitamos al usuario que lo habilite.

    A continuación, verificamos si se ha otorgado el permiso de ubicación o no. Si no se ha otorgado, solicitamos al usuario que otorgue el permiso. Si el usuario deniega permanentemente la solicitud de permiso, llamamos al método openAppSettings() para abrir la página de configuración de la aplicación.

    Utilizando esta solución, podemos evitar el error “Permiso de ubicación en segundo plano denegado para siempre” y garantizar que la aplicación obtenga la ubicación tanto en primer plano como en segundo plano sin problemas.

Comments are closed.