flutter:应用关闭时通过接收短信弹出通知

Posted

技术标签:

【中文标题】flutter:应用关闭时通过接收短信弹出通知【英文标题】:flutter: pop a notification by receiving SMS when the app is closed 【发布时间】:2020-03-25 18:38:21 【问题描述】:

我想在手机上发生某些特定事件(在我的情况下接收具有预定格式或来自特定电话号码的短信)时弹出通知(并在单击打开应用程序时)。目前我使用flutter SMS package 并在 main() 中构建一个 SmsReceiver 类的实例,如下所示,并尝试将短信正文打印到控制台:

void main() 
  SmsReceiver receiver = new SmsReceiver();
  receiver.onSmsReceived.listen((SmsMessage msg) => print(msg.body));
  runApp(MyApp());

我在真实设备(三星 Galaxy 8+)上测试代码。当应用程序正在运行或在后台运行时,我可以毫无问题地收到短信正文。但是,当我关闭应用程序并收到一条短信时,出现以下错误?在控制台中打印:

W/FlutterJNI(23977):尝试向 Flutter 发送平台消息,但 FlutterJNI 与原生 C++ 分离。无法发送。频道:plugins.babariviere.com/recvSMS。响应 ID:0

你能帮我解决这个问题吗?即使应用程序关闭,是否可以侦听此类事件并触发通知?

附言我调查了flutter local notifications。但是,看起来这个包只安排通知出现。就我而言,我希望通知是事件驱动的。

【问题讨论】:

【参考方案1】:

我面临 100% 相同的问题。我仍在寻找性能稳定但还没有运气的解决方案,但我正在写这个答案来分享我的经验和发现,希望我们可以一起找到解决方案。

    这个包可以接收短信。 当应用程序关闭时,任何应用程序(即使是原生 androidios)都无法响应任何事件。 为了在应用关闭时回复短信,原生安卓应用会运行一些服务。该服务就像一个应用程序,但在前台没有用户界面。即使应用关闭,服务也可以在后台运行。 在 Flutter 中,我们必须找到一种方法来运行后台服务,该服务将侦听传入的 SMS 事件。即服务至少会有这个代码

SmsReceiver receiver = new SmsReceiver(); receiver.onSmsReceived.listen((SmsMessage msg) // Do something to pop a notification and launch main application );

因此我们必须想办法通过flutter app运行android后台服务,这可以通过使用flutter包在后台运行服务来实现。

我是任何类型的应用程序开发的新手,我可能错了,但这是我想出来的。如果您找到出路,请分享。祝你好运。

【讨论】:

【参考方案2】:

您可以使用 Telephony 包并简单地使用 backgrounMessageHandler 类获取更多信息 访问https://pub.dev/packages/telephony

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于flutter:应用关闭时通过接收短信弹出通知的主要内容,如果未能解决你的问题,请参考以下文章

即使应用程序关闭,whatsapp 如何设法接收推送通知?

Flutter中关闭应用程序时如何接收本地通知?

如何在接收基于 Flutter 构建的 FCM 推送通知时修复应用程序崩溃

小天才如何关闭消息动态?

Flutter Firebase 消息传递 - 应用打开时未显示推送通知

Flutter Firebase Cloud Messaging 如何自动关闭/取消通知?