Flutter如何用url_launcher打开带预设内容且无需指定号码的短信?
实现无指定号码但带预设内容的短信启动功能
完全可行,只需要调整短信URI的格式,同时修正你原函数里的一个明显bug(Android分支里错误调用了打电话的URI,不是短信的)。
修改后的实现代码
launchSmsWithPresetContent(BuildContext context) async { const presetMessage = "Hello there"; try { if (Platform.isAndroid) { // Android 短信URI:不指定号码,仅携带预设内容 String smsUri = 'sms:?body=${Uri.encodeComponent(presetMessage)}'; await launchUrl(Uri.parse(smsUri)); } else if (Platform.isIOS) { // iOS 短信URI:不指定号码,仅携带预设内容 String smsUri = 'sms:&body=${Uri.encodeComponent(presetMessage)}'; await launchUrl(Uri.parse(smsUri)); } } catch (e) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('启动短信应用失败,请重试!'), ), ); } }
关键调整说明
- 移除了原函数的
phoneNumber参数,因为不需要预先指定收件人 - 修正Android分支的错误:原代码里误调用了
calluri(打电话的URI),现在改为正确启动短信URI - 调整URI格式:
- Android:使用
sms:?body=xxx,冒号后直接加?连接body参数,不填号码就会让用户自行选择/输入收件人 - iOS:使用
sms:&body=xxx,冒号后直接加&连接body参数,同样会打开空白收件人、带预设内容的短信编辑界面
- Android:使用
使用效果
调用这个函数后,系统自带的短信应用会直接打开,收件人栏为空,用户可以从通讯录选择联系人,或者手动输入电话号码,短信内容栏已经自动填充好预设的文本。
内容的提问来源于stack exchange,提问作者Shashi kumar S
相关产品推荐
相关产品推荐

