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

如何使用url_launcher仅打开默认邮件应用,而非进入撰写界面?

解决方案推荐

直接使用mailto:协议会默认打开邮件撰写界面,要实现直接启动邮件应用本身的需求,推荐以下几个Flutter包:

  • app_links:支持通过自定义URL Scheme或通用链接唤起指定应用,适配iOS和Android平台。你需要配置对应邮件应用的Scheme(比如iOS自带邮件应用用message://,Android端Gmail用gmail://),再通过包的API唤起。示例代码:

    import 'package:app_links/app_links.dart';
    
    final appLinks = AppLinks();
    // 唤起Android端Gmail应用
    await appLinks.openApp('com.google.android.gm');
    // 唤起iOS自带邮件应用
    await appLinks.openUrl(Uri.parse('message://'));
    
  • url_launcher(进阶用法):原生的url_launcher也能通过指定应用Scheme实现需求,只是需要自行查询目标平台邮件应用的Scheme。比如Android端Outlook的Scheme是ms-outlook://,iOS端是outlook://,直接调用launchUrl打开对应Uri即可:

    await launchUrl(Uri.parse('gmail://'), mode: LaunchMode.externalApplication);
    

    注意:不同邮件应用的Scheme存在差异,需要针对目标应用单独配置,同时要处理Scheme不存在的异常(比如用户未安装对应应用)。

  • device_apps:该包可列出设备上已安装的应用,筛选出邮件类应用后直接启动。示例代码:

    import 'package:device_apps/device_apps.dart';
    
    // 查找已安装的邮件应用
    final apps = await DeviceApps.getInstalledApplications(
      includeSystemApps: true,
      onlyAppsWithLaunchIntent: true,
    );
    final mailApp = apps.firstWhere((app) => app.appName.toLowerCase().contains('mail'));
    // 启动应用
    await DeviceApps.openApp(mailApp.packageName);
    

    这个方法无需硬编码Scheme,能适配用户设备上任意已安装的邮件应用,但要处理找不到邮件应用的异常情况。

额外配置说明

  • Android端:需在AndroidManifest.xml中添加查询应用的权限:
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
    
  • iOS端:需在Info.plist中添加对应应用的Scheme到LSApplicationQueriesSchemes数组,示例:
    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>message</string>
      <string>gmail</string>
    </array>
    

内容的提问来源于stack exchange,提问作者Frankline Sable

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:45:37