android - flutter 位置,未处理的异常 : PlatformException(PERMISSION_DENIED_NEVER_ASK, 后台位置权限永远被拒绝

标签 android flutter location

我正在使用Location flutter 包访问用户的后台位置,任何用户第一次打开应用程序时都会请求权限,当用户接受时,它会在控制台中返回此错误

Unhandled Exception: PlatformException(PERMISSION_DENIED_NEVER_ASK, Background location permission denied forever - please open app settings, null, null)

如果用户关闭应用程序并重新打开它..它工作得很好(在前台和后台获取位置),甚至不需要再次请求位置权限。

按照包本身的入门指南,以下是我向 AndroidManifest.xml 文件添加权限的方法:

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

最佳答案

我一直在研究这个问题,我发现问题出在您使用 location.enableBackgroundMode() 时然后选择always当你第一次回击时,它会抛出异常并 isBackgroundModeEnabled也将是错误的“尽管系统中启用了后台模式”,并且您必须重新启动应用程序以检查后台模式是否正确启用。

但是,我发现调用location.enableBackgroundMode()再次也解决了这个问题,它确实不需要再次启用后台,但它以某种方式使 isBackgroundModeEnabled返回真值。这是我的修复代码:

Future<bool> enableBackgroundMode() async {
bool _bgModeEnabled = await location.isBackgroundModeEnabled();
if (_bgModeEnabled) {
  return true;
} else {
  try {
    await location.enableBackgroundMode();
  } catch (e) {
    debugPrint(e.toString());
  }
  try {
    _bgModeEnabled = await location.enableBackgroundMode();
  } catch (e) {
    debugPrint(e.toString());
  }
  print(_bgModeEnabled); //True!
  return _bgModeEnabled;
 }
}

关于android - flutter 位置,未处理的异常 : PlatformException(PERMISSION_DENIED_NEVER_ASK, 后台位置权限永远被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70545730/

相关文章:

android - 我怎样才能杀死Android中的进程?

flutter :如何发现对继承的小部件的依赖?

flutter - Flutter:处理无效值:不在范围内,并在ListviewBuilder中为其提供初始值

android - android NETWORK_PROVIDER如何将cellid和lac翻译成lat long

android - 在 Firebase Cloud Messaging 上通过 XMPP 传送上游消息的误解

android - 手动删除照片文件后删除图库中的照片缩略图

android - 如何更改自定义适配器中按钮单击时的按钮文本

dart - 如何使用 TextPainter 绘制文本?

swift - didEnterRegion 和 didExitRegion 在 iOS8 中不起作用

IOS - 调用线程通过推送通知请求发送位置