Flutter技术问询:如何借助包调用内置短信应用发送短信?
嘿,刚好我之前做过类似的需求,给你整理两种靠谱的方法,都是调用系统默认短信应用的,不用自己从零开发短信功能~
方法一:用Flutter原生方式(借助官方维护的轻量包)
其实Flutter本身没有直接调用短信应用的API,但我们可以利用系统的URL Scheme,配合官方的url_launcher包来实现,这个包不算“第三方小众包”,是Flutter团队推荐的工具包,用起来很稳。
步骤:
- 先在
pubspec.yaml里添加依赖:
dependencies: url_launcher: ^6.1.12 # 记得用最新版本哦
然后执行flutter pub get安装。
- 写发送短信的函数:
import 'package:url_launcher/url_launcher.dart'; Future<void> openDefaultSMSApp(String phoneNumber, String message) async { // 构建短信URI,自动填充收件人和内容 final smsUri = Uri( scheme: 'sms', path: phoneNumber, queryParameters: { 'body': Uri.encodeComponent(message), // 转义特殊字符,避免乱码 }, ); if (await canLaunchUrl(smsUri)) { await launchUrl(smsUri); // 打开系统默认短信应用 } else { throw Exception('无法打开系统短信应用,请检查设备是否支持'); } }
- 调用这个函数就行,比如按钮点击事件里:
ElevatedButton( onPressed: () => openDefaultSMSApp('13800138000', '你好,这是测试短信'), child: const Text('发送短信'), )
这个方法的好处是:完全依赖系统短信应用,不需要申请额外的短信发送权限,用户可以看到内容并确认发送,更安全。
方法二:用专门的第三方包简化操作
如果觉得自己写URI麻烦,可以用专门处理短信的第三方包,比如flutter_sms,它封装了平台差异,用起来更省心。
步骤:
- 添加依赖到
pubspec.yaml:
dependencies: flutter_sms: ^2.3.0 # 请确认最新版本
执行flutter pub get安装。
- 调用发送函数:
import 'package:flutter_sms/flutter_sms.dart'; Future<void> sendSMSViaPackage(String phoneNumber, String message) async { final recipients = [phoneNumber]; try { final result = await sendSMS(message: message, recipients: recipients); print('短信操作结果:$result'); // 大部分情况下会直接打开系统短信应用,填充好内容等用户发送 } catch (e) { print('发送失败:$e'); } }
额外注意事项:
- 权限:Android 6.0及以上需要在
AndroidManifest.xml里添加权限:
<uses-permission android:name="android.permission.SEND_SMS" />
如果是Android 11及以上,还要添加包可见性声明,确保能找到短信应用:
<queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="sms" /> </intent> </queries>
- 测试:一定要在真机上测试,模拟器大概率没有完整的短信功能。
- 用户体验:不管哪种方法,都建议不要静默发送短信,最好让用户确认后再发送,避免隐私问题。
内容的提问来源于stack exchange,提问作者Vaibhav Bhavsar
相关产品推荐
相关产品推荐

