我正在开发一款 Flutter 应用,使用 Geolocator 跟踪用户的移动(速度)并根据速度显示不同的叠加层。如果速度低于 5 公里/小时,我想显示“停车...
我正在开发一款 Flutter 应用,使用 Geolocator 跟踪用户的移动(速度)并根据速度显示不同的叠加层。如果速度低于 5 公里/小时,我想显示“停车模式”叠加层,如果速度高于 5 公里/小时,我想显示“驾驶模式”叠加层。
为了实现这一点,我使用:
flutter_background_service 用于后台任务。Geolocator 用于位置跟踪和速度计算。flutter_overlay_window_sdk34 用于显示叠加层。应用程序成功计算了速度,但速度变化时叠加层并未按预期自动触发。叠加窗口的权限已授予,我可以手动显示叠加层,但它们不会在后台自行触发。
这是我的实现的简化版本。
void callbackDispatcher() {
Workmanager().executeTask((task, inputData) async {
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
double speed = position.speed; // speed in m/s
double speedKmh = speed / 1000;
if (speedKmh < 5.0) {
await FlutterOverlayWindow.requestPermission();
try {
await OverlayUtils.showCustomOverlay(overlayTitle: 'Park Mode');
} catch (e) {
print("Error showing park mode overlay: $e");
}
} else if (speedKmh > 5.0) {
await FlutterOverlayWindow.requestPermission();
try {
await OverlayUtils.showCustomOverlay(overlayTitle: 'Drive Mode');
} catch (e) {
print("Error showing drive mode overlay: $e");
}
}
return Future.value(true);
});
}
问题:即使应用正确计算了速度,当满足速度条件时,叠加层也不会自动触发。手动触发时,叠加层逻辑可以正常工作,但在后台无法按预期工作。
我尝试过的方法:验证覆盖窗口权限(已授予)。检查后台服务是否正在运行(正在运行)。手动显示覆盖效果很好,但从后台任务触发时则不行。问题:当应用在后台运行时,如何让覆盖根据用户速度自动触发?后台服务与 flutter_overlay_window_sdk34 包的交互方式是否存在问题,还是我的实现中遗漏了某些内容?
任何帮助或指导都将不胜感激。谢谢!