问题描述
我在尝试实现扑朔迷离的后台任务时遇到了困难。我尝试使用android_alarm_manager插件,但由于docs指定了警报管理器不精确,因此:
注意:从API 19(Build.VERSION_CODES.KITKAT)开始,警报传递是不精确的:操作系统将转移警报,以最大程度地减少唤醒和电池消耗。有新的API支持需要严格交付保证的应用程序。请参见setWindow(int,long,long,android.app.PendingIntent)和setExact(int,long,android.app.PendingIntent)。 targetSdkVersion早于API 19的应用程序将继续看到以前的行为,在该行为中,所有警报均在请求时准确地传递。
收件人
实现观看时间或捕捉相机运动的过程。
flutter docs(和其他来源)链接到2018年的medium article,作者分享了他开发插件的经验,这些插件利用了Dart代码的后台执行优势。但是我很难理解这篇文章,而且对于简单的任务似乎不知所措...
我还阅读了使用MethodCannel编写平台特定代码的可能性,但是我以前从未使用过android,因此不知道如何做。
是否可以使用一种更简单的方法来快速创建后台任务?想象一个非常简单的应用程序,其唯一目的是在后台运行并检查时间。如果达到了四分之一小时(例如,下午1:15),则该应用应该会发出声音。该应用每半小时应发出另一种声音(例如,下午1:30),而每整整一个小时又发出另一种声音(例如,下午2点)。
这似乎没什么大不了的,但我真的不知道该怎么做。你有什么想法吗?
解决方法
您想做的问题是Android和IOS都不允许您连续运行后台进程。与Android相比,iOS对它的限制更大。
对于IOS,您的应用仅在非常特殊的情况下才能在后台继续运行。例如,这些操作包括播放音频,获取位置更新或从服务器获取最新内容。而且两次执行之间的最小间隔为15分钟。
克服此问题的方法是使用某种调度系统来运行一个简单的过程或允许用户打开该应用程序。
有一些有用的软件包可以帮助您:
-
如果需要连续运行后台进程,请查看以下程序包:
https://pub.dev/packages/background_fetch -
如果需要显示计划的消息,请使用本地通知:
https://pub.dev/packages/flutter_local_notifications -
另一个有用的lib,用于运行后台进程:
https://pub.dev/packages/workmanager
但是请注意,这些软件包都无法完全满足您的要求。也许您应该考虑解决问题的替代方法。我在构建警报和计时器时也遇到了类似的问题。如果愿意,您可以分享更多有关您的需求的信息,我们将很乐意为您提供帮助。