【发布时间】: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_fetch 和WorkManager 特别有用,但我也放弃了使用这些库。
原因是上面两个库只能在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