Flutter-Android不要求权限

时间:2019-04-12 20:52:00

标签: android flutter

我正在尝试使用插件location来获取设备的当前位置,但是Android从不要求权限。我收到此错误:

  

发生异常。 PlatformException   (PlatformException(PERMISSION_DENIED_NEVER_ASK,位置权限   永远被拒绝-请打开应用程序设置,为null))

我在Android文件夹中可以找到的每个“ AndroidManifest.xml”文件中添加了以下行(不知道我应该实际使用哪个,我发现了其中的3个)

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

我尝试使用插件permission_handler手动请求它们,但仍然没有弹出窗口。

我完全迷路了,网上找不到任何类似的东西。这是代码:

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

编辑:我在设备(OnePlus 6)和仿真器(Pixel XL API 28)上尝试了此操作。我也尝试过卸载/重新安装该应用程序。

3 个答案:

答案 0 :(得分:0)

该错误消息试图使您更清楚:您的设备(您或您正在测试的设备上的其他人)在Android设备上选择了 Never 之前要求获得许可。
这意味着Android不会再次请求许可。

只需在其他设备上尝试或再次卸载应用即可。

答案 1 :(得分:0)

您可以在代码中处理这种权限行为。即使您从未在模拟器上安装过应用程序,也可能会发生这种情况,并且必须在代码中进行处理,因为在最终用户掌握应用程序时可能会发生这种情况。

此异常意味着您从PermissionStatus.denied权限处理程序插件方法中获取了checkPermissionStatus,当用户在android权限对话框中点击Never ask again复选框并拒绝请求时,可能会发生这种情况。

最简单的方法是什么?

如果您从PermissionStatus.denied方法中获得了checkPermissionStatus,则可以显示一个对话框,告知用户您的应用需要该权限才能提供更好的体验,并且可以在此对话框中将用户重定向到Android权限设置,用户可以在其中手动启用请求的权限。 您可以使用权限处理程序插件中的openAppSettings()方法进行此操作。

也许您应该阅读this文章,该文章虽然有些陈旧,但它显示了有关如何在android中询问和处理用户权限的正确流程。本文不讨论新版Android Q中的新权限更改。

答案 2 :(得分:0)

在询问location plugin的git之后,我做到了:

flutter clean

然后我弹出请求权限的

感谢this guy