Flutter中如何实现无需用户交互自动转发收到的短信?
Flutter 接收短信自动转发实现方案
前置准备
你已经实现了短信接收的基础逻辑,现在需要新增短信发送能力,按以下步骤修改即可:
1. 引入短信发送依赖
目前常用的维护中的短信发送库是sms_maintained,在pubspec.yaml的dependencies节点下添加:
dependencies: sms_maintained: ^0.2.5
添加后执行flutter pub get安装依赖。
2. 配置平台权限
Android 端配置
在android/app/src/main/AndroidManifest.xml中添加发送短信权限(你应该已经配置了接收短信的权限,这里只需要补发送权限即可):
<uses-permission android:name="android.permission.SEND_SMS" />
注意安卓6.0及以上版本需要动态申请短信发送权限,你可以配合permission_handler库在应用启动时向用户申请权限。
iOS 端配置
iOS受系统安全限制,无法实现后台自动发送短信,调用发送接口后会自动弹出系统短信发送弹窗,需要用户手动确认后才能发送,无额外权限配置。
3. 修改现有业务代码
修改你现有的短信监听逻辑,在保留Toast提示的同时新增转发逻辑即可,示例代码如下:
// 预定义转发目标手机号 const String forwardTargetPhone = "13800138000"; mymessage() { SmsReceiver receiver = new SmsReceiver(); receiver.onSmsReceived.listen((SmsMessage msg) async { // 保留原有Toast展示逻辑 Fluttertoast.showToast( msg: msg.body, toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, timeInSecForIosWeb: 1, backgroundColor: Colors.red, textColor: Colors.white, fontSize: 16.0 ); // 新增短信转发逻辑 SmsSender smsSender = SmsSender(); SmsMessage forwardMessage = SmsMessage( forwardTargetPhone, // 转发内容可自定义,这里附带了原始发送人号码 "转发短信:来自${msg.address}\n内容:${msg.body}" ); // 可选:监听短信发送结果 forwardMessage.onStateChanged.listen((sendState) { if (sendState == SmsMessageState.Sent) { Fluttertoast.showToast(msg: "短信转发成功"); } else if (sendState == SmsMessageState.Fail) { Fluttertoast.showToast(msg: "短信转发失败,请检查权限"); } }); smsSender.sendSms(forwardMessage); }); }
其他注意事项
- 部分定制安卓系统会对后台发送短信做风险拦截,可能会弹出提示或者直接拦截发送请求,需要用户手动授权允许应用发送短信。
- 超过长度的长短信会自动拆分为多条短信发送。
内容的提问来源于stack exchange,提问作者Zu Haib
相关产品推荐
相关产品推荐

