Flutter中如何程序启动短信应用并为收件人栏预置默认邮箱地址
实现步骤
1. 引入依赖
使用Flutter生态通用的路由跳转插件实现系统应用唤起,首先在pubspec.yaml中添加依赖:
dependencies: flutter: sdk: flutter url_launcher: ^6.2.0 # 可替换为当前最新稳定版本
添加后执行flutter pub get完成依赖安装。
2. 平台权限配置
Android端配置
在android/app/src/main/AndroidManifest.xml的manifest根标签下添加包可见性声明,适配Android 11及以上系统的权限要求:
<queries> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="sms" /> </intent> </queries>
iOS端配置
在ios/Runner/Info.plist的dict标签下添加短信协议白名单声明:
<key>LSApplicationQueriesSchemes</key> <array> <string>sms</string> </array>
3. 核心功能实现
点击「联系我们」按钮时执行以下代码,自动唤起短信应用并预填收件人:
import 'dart:io'; import 'package:url_launcher/url_launcher.dart'; Future<void> launchSmsApp(String recipientEmail) async { final Uri smsUri; // 区分平台构造对应的sms协议链接 if (Platform.isAndroid) { smsUri = Uri.parse('sms:$recipientEmail'); } else if (Platform.isIOS) { smsUri = Uri.parse('sms:/$recipientEmail'); } else { return; } // 校验链接可访问后发起跳转 if (await canLaunchUrl(smsUri)) { await launchUrl(smsUri); } }
调用时直接传入预先设定的邮箱地址即可:launchSmsApp('contact@example.com')
已知技术实现障碍
- 短信应用兼容问题:部分系统默认短信应用不支持邮箱格式作为收件人,会直接清空预填的收件人内容,仅支持纯数字手机号
- 国产定制ROM限制:国内部分安卓定制系统(如MIUI、ColorOS、HarmonyOS等)修改了
sms协议的解析逻辑,存在预填内容无法被正确识别的情况 - 系统状态限制:iOS设备如果未插入SIM卡、未登录iMessage,或者用户未设置默认短信应用,调用协议后会无响应
- 特殊字符解析异常:如果邮箱包含
+、%等特殊字符,部分短信应用会解析异常,导致收件人内容被截断
内容的提问来源于stack exchange,提问作者Speeder
相关产品推荐
相关产品推荐

