android - flutter:应用关闭时通过接收短信弹出通知
问题描述
当手机上发生某些特定事件(在我的情况下接收具有预定格式或来自特定电话号码的短信)时,我想弹出通知(并在单击打开应用程序时)。目前我使用颤振短信包并在 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
你能帮我解决这个问题吗?即使应用程序关闭,是否可以侦听此类事件并触发通知?
ps 我调查了颤振的本地通知。但是,看起来这个包只安排通知出现。就我而言,我希望通知是事件驱动的。
解决方案
我面临100%同样的问题。我仍在寻找性能稳定但还没有运气的解决方案,但我正在写这个答案来分享我的经验和发现,希望我们可以一起找到解决方案。
- 使用此套餐可以接收短信。
- 当应用程序关闭时,任何应用程序(即使是原生 Android 或 iOS)都无法响应任何事件。
- 为了在应用关闭时回复短信,原生安卓应用会运行一些服务。该服务就像一个应用程序,但在前台没有用户界面。即使应用程序关闭,服务也可以在后台运行。
- 在 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包在后台运行服务来实现。
我是任何类型的应用程序开发的新手,我可能错了,但这是我想出来的。如果您找到出路,请分享。祝你好运。
推荐阅读
- php - 输入“重置”记录后的MySQL PHP计数方式
- ios - 预装的ios应用发布后也会有更新吗?
- cakephp - CakePHP 4 Tree Behavior手动设置左端右(JQuery排序)
- spring-boot - OAuth2RestTemplate 过期后不刷新令牌
- macros - 递归宏 Elixir
- powershell - 安排一个任务以删除另一个任务
- sql - 使用大表连接更新 Amazon Redshift 中的列
- javascript - Firestore for web - 在离线写入时,抛出而不是在本地保存并在连接恢复时同步
- android - 使用 Retrofit 和 okhttp 实现 stale-while-revalidate
- sql - SQL:计算自上次成功以来的天数