Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flutter - Android doesn't ask for permissions

I'm trying to get the current location of the device using the plugin location but Android never asks for permissions. I get this error:

Exception has occurred. PlatformException (PlatformException(PERMISSION_DENIED_NEVER_ASK, Location permission denied forever- please open app settings, null))

I have added the line below in every `AndroidManifest.xml´ file that I could find in the Android folder (no idea which one I should use actually, I found 3 of them)

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

I tried the plugin permission_handler to request them manually but still, no pop-up.

I'm completely lost and I find nothing similar on the net. Here is the code :

Future<LocationData> _getLocation() async {
  LocationData currentLocation;
  
  // returns a map with unreadable numbers which make no sense
  var t = await PermissionHandler()
      .requestPermissions([PermissionGroup.location]);
  
  // returns false
  var test = await location.requestPermission();

  try {
    currentLocation = await location.getLocation();
  } catch (e) {
    currentLocation = null;
  }
  return currentLocation;
}

Edit: I tried this on my device (OnePlus 6) and on an emulator (Pixel XL API 28). I've also tried to uninstall/reinstall the app.

like image 736
Robouste Avatar asked Apr 12 '19 20:04

Robouste


2 Answers

You can handle this kind of permission behavior in your code. Even if you never had installed your app on emulator this behavior can happen and you must handle this in your code because this can happen when your app are in final user hands.

This exception means that you're getting PermissionStatus.denied from checkPermissionStatus permission handler plugin method and this can happen when user hits Never ask again checkbox in android permission dialog and deny the request.

What is the most simple way to handle this?

If you get PermissionStatus.denied from checkPermissionStatus method you can show a dialog telling to the user that your app needs of that permission to provide a better experience and in this dialog you can redirect the user to Android permission settings where the user can enable the requested permission manually. You can do this using openAppSettings() method from permission handler plugin.

Maybe you should read this article, it's a little bit old but it shows the correct flow about how to ask and handle user permissions in android. This article doesn't talks about the new permissions changes in newer Android Q.

like image 34
Marcos Boaventura Avatar answered Oct 13 '22 01:10

Marcos Boaventura


After asking on the git of location plugin, I did this :

flutter clean

And I got the pop up asking for permissions.

Thank to this guy.

like image 118
Robouste Avatar answered Oct 13 '22 00:10

Robouste