【问题标题】:Flutter - how to run a process at a specific time even if the app is in background (like an alarm app)Flutter - 即使应用程序在后台(如警报应用程序)如何在特定时间运行进程
【发布时间】:2022-01-22 22:33:53
【问题描述】:

我是一名在日本使用 Flutter 的软件工程师。
开发一个可以在早上叫醒我的闹钟应用程序,但在执行以下操作时遇到了麻烦。
如果您能帮助我,我将不胜感激。

问题。
我想知道是否有办法在预定时间执行特定进程, 即使应用程序被杀死或后台。

详情
我目前正在开发一个闹钟应用程序,可以在指定时间发送本地通知和自定义音乐。
我能够安排在指定时间发送本地通知。
但是,我找不到同时在后台运行特定进程的方法。
(这是播放用户选择的特定音乐的过程的图像)

我发现了什么
确认可以使用flutter_local_notifications在每周的指定日期和指定时间发送通知。
(执行flutterLocalNotificationsPlugin#zonedSchedule()

但是,在 flutter_local_notifications 中,并没有监听器之类的东西来接收通知本身。
(有一个 onSelectNotification,但在用户点击通知栏之前它不起作用。)

库作者说没有监听器来触发这样的通知时间,
所以我决定在这个库中只使用本地通知,并寻找另一个库来代替后台处理。
https://github.com/MaikuB/flutter_local_notifications/issues/1201

我发现background_fetchWorkManager 特别有用,但我也放弃了使用这些库。
原因是上面两个库只能在15分钟的意义上执行,如下图,由于iOS的限制, 而且我怀疑该过程无法在预期的时间执行。

workManager
https://pub.dev/packages/workmanager#customisation-android-only

// Periodic task registration
Workmanager().registerPeriodicTask(
    "2", 
    "simplePeriodicTask", 
    // When no frequency is provided the default 15 minutes is set.
    // Minimum frequency is 15 min. Android will automatically change your frequency to 15 min if you have configured a lower frequency.
    If you have configured a lower frequency. frequency: Duration(hours: 1),
)

background_fetch

Background Fetch is a very simple plugin which will awaken an app in the background about every 15 minutes, providing a short period of background running-time. This plugin will execute your provided callbackFn whenever a background-fetch event occurs.

我认为唯一的方法是使用 MethodChannel 为 Flutter 中的每个操作系统编写和执行本机代码。
我想知道是否有一种方法可以在指定的时间执行预定的进程,即使应用程序在 Flutter 中处于 kill 或 background 状态,即使它使用 MethodChannel。

对不起,这么久。请告诉我。
非常感谢

【问题讨论】:

    标签: android ios flutter background flutter-method-channel


    【解决方案1】:

    为后台进程提供的唯一文档(警报是引用的示例之一)指出媒体上的一篇文章: https://docs.flutter.dev/development/packages-and-plugins/background-processes

    【讨论】:

      猜你喜欢
      • 2020-09-27
      • 2021-08-03
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多