You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:36:06