Flutter:从后台服务自动恢复应用程序

Posted

技术标签:

【中文标题】Flutter:从后台服务自动恢复应用程序【英文标题】:Flutter: automatically resume app from background service 【发布时间】:2020-12-09 18:54:16 【问题描述】:

有没有办法通过后台服务从暂停或非活动的生命周期状态自动恢复 Flutter 应用?

类似于 WhatsApp 应用在暂停或不活动时接到电话。

【问题讨论】:

你做到了吗? 【参考方案1】:

不,您不能简单地从服务中唤醒应用。这将为各种垃圾邮件应用程序和安全风险打开大门。您需要在 android 上使用 CallKit 或类似 SIP 之类的东西专门将其注册为 VOIP 应用程序以接收来电。

对于其他事情,您可以使用推送通知,但这不会启动您的应用程序。用户始终必须点击您显示的通知。

【讨论】:

感谢库恩罗亚尔。我搜索并找到了我将调查的这个链接:github.com/masashi-sutou/flutter_ios_voip_kit 是的,如果您想接听电话,这看起来是个不错的起点。【参考方案2】:

你需要同时使用几个东西:

使用推送通知唤醒您的应用: https://pub.dev/packages/firebase_messaging 要使用推送通知启动您的应用程序,请参阅这篇文章: https://***.com/a/48405551/4335775 使用 CallKit (IOS) 或 ConnectionServices (Android) 显示即将到来的呼叫屏幕。到这个答案的那一天,只有几个包可以处理这些事情,这里有一个可以处理两个平台的包: https://pub.dev/packages/flutter_callkeep

如果你想要一个完全不同的东西并且需要运行一些后台进程,那么你首先应该知道很多事情。 我建议从这里开始:https://flutter.dev/docs/development/packages-and-plugins/background-processes 这是一个有用的包,可以处理应该不断运行的后台进程: https://pub.dev/packages/background_fetch

只能通过显式命令唤醒应用。用户必须点击按钮。并且有处理输入的方法,消息可以传递参数,可以将之前的状态保存在数据库中或者共享首选项等。

【讨论】:

感谢 Racr0x 提供这些有用的链接。我使用 WebRTC 和 websocket 创建了一个颤振应用程序来发送信号,该应用程序仅在应用程序处于前台时才能正常工作。当应用程序暂停或不活动时,我观看了打印消息,甚至导航(使用全局键)和铃声都可以工作,但应用程序仍处于暂停或不活动的生命周期状态。我会看一下flutter_callkeep包,看看它是否会唤醒应用程序并将其移动到恢复状态。 应用只能通过显式命令唤醒。用户必须点击按钮。并且有处理输入的方法,消息可能会传递参数,可以将之前的状态保存在数据库中或共享首选项中。如果您发现任何困难,请告诉我,我很乐意为您提供帮助。 有人说,为了将我的应用程序带到前台,我必须从另一个上下文(Service 或 BroadcastReceiver)调用 startActivity()。 (***.com/questions/29766270/…) 如果我的活动在不同的任务上,他说我可以用这个把活动的任务带到前台: ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE); activityManager.moveTaskToFront(getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION);但这看起来像本机代码(java 或 iOS 类型代码)。我不知道如何在 Flutter 中做到这一点。是否有 Flutter 库或包来实现这个目标? 这是 Android 的原生 Java。

以上是关于Flutter:从后台服务自动恢复应用程序的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在flutter应用程序关闭时通过平台通道从android后台服务向flutter端发送消息

即使 Flutter 应用程序在后台,如何自动响应 Firebase Document Stream 更新? [关闭]

iPhone iOS如何在应用程序从后台恢复时添加密码/密码锁定屏幕?

Flutter 本地通知 - 当应用程序在后台运行时,ZonedSchedule 通知不起作用

如何在 Flutter 中创建服务以使应用始终在后台运行?

Flutter:无法从存储中读取密钥:无法恢复密钥