8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Flutter 覆盖窗口不会在后台服务中自动触发

mightycpa 1月前

14 0

我正在开发一款 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 包的交互方式是否存在问题,还是我的实现中遗漏了某些内容?

任何帮助或指导都将不胜感激。谢谢!

帖子版权声明 1、本帖标题:Flutter 覆盖窗口不会在后台服务中自动触发
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由mightycpa在本站《flutter》版块原创发布, 转载请注明出处!
最新回复 (0)
返回
作者最近主题: