【问题标题】:Flutter - Android doesn't ask for permissionsFlutter - Android 不请求权限
【发布时间】:2019-09-03 16:04:30
【问题描述】:

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

发生了异常。平台异常 (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) 上进行了尝试。我也尝试卸载/重新安装该应用程序。

【问题讨论】:

  • 一个简单的方法是在Android设置的应用设置菜单中手动启用权限。但最好在您的代码中处理这种行为。
  • 我在 OP6T 上遇到了同样的问题,很高兴找到了答案

标签: android flutter permissions


【解决方案1】:

添加这个

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

【讨论】:

    【解决方案2】:

    location plugin 的 git 上询问后,我这样做了:

    flutter clean
    

    我得到了请求权限的弹出窗口。

    感谢this guy

    【讨论】:

    • 我已经尝试过 flutter clean 仍然没有显示在设备上......
    【解决方案3】:

    您可以在代码中处理这种权限行为。即使您从未在模拟器上安装过您的应用,这种行为也可能发生,您必须在代码中处理此问题,因为当您的应用在最终用户手中时可能会发生这种情况。

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

    最简单的处理方法是什么?

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

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

    【讨论】:

      【解决方案4】:

      错误消息试图说明:您的设备(您或您正在测试的设备上的其他人)在 Android 要求之前的权限。
      这意味着 Android 不会再次请求权限。

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

      【讨论】:

      • 我也在模拟器上试过,结果一样。我已经卸载/重新安装了该应用程序,结果相同。
      • @Robouste 我现在也面临这个问题。我不知道。我尝试过flutter clean,卸载,重新安装。它一直显示被拒绝。
      • 对不起,我帮不上忙,从那以后我就没有和 Flutter 合作过
      猜你喜欢
      • 2021-11-01
      • 1970-01-01
      • 2020-07-31
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多