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

flutter location , Unhandled Exception: PlatformException(PERMISSION_DENIED_NEVER_ASK, Background location permission denied forever

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

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 return 为真价值。这是我的修复代码:

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