颤动位置,未处理的异常: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;
}
}
我正在使用 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;
}
}