【问题标题】:How do I launch the email client directly to inbox view?如何将电子邮件客户端直接启动到收件箱视图?
【发布时间】:2010-08-15 20:21:53
【问题描述】:

这甚至可以在不调用特定包的情况下实现吗?我发现了无数通过意图发送电子邮件的示例,但我找不到任何关于通过按下按钮在设备上简单地打开默认电子邮件客户端(如果用户有多个客户端,最好使用选择器对话框)。

【问题讨论】:

  • 我很好奇你为什么要这样做。
  • 客户希望他们的应用程序有一个“电子邮件”按钮,该按钮只是启动默认邮件客户端来检查公司邮件。

标签: android android-intent


【解决方案1】:

没有默认/简单的方法可以做到这一点。这段代码对我有用。它会打开一个选择器,其中包含所有注册到设备并直接发送到收件箱的电子邮件应用程序:

    Intent emailIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:"));
    PackageManager pm = getPackageManager();

    List<ResolveInfo> resInfo = pm.queryIntentActivities(emailIntent, 0);
    if (resInfo.size() > 0) {
        ResolveInfo ri = resInfo.get(0);
        // First create an intent with only the package name of the first registered email app
        // and build a picked based on it
        Intent intentChooser = pm.getLaunchIntentForPackage(ri.activityInfo.packageName);
        Intent openInChooser =
                Intent.createChooser(intentChooser,
                        getString(R.string.user_reg_email_client_chooser_title));

        // Then create a list of LabeledIntent for the rest of the registered email apps 
        List<LabeledIntent> intentList = new ArrayList<LabeledIntent>();
        for (int i = 1; i < resInfo.size(); i++) {
            // Extract the label and repackage it in a LabeledIntent
            ri = resInfo.get(i);
            String packageName = ri.activityInfo.packageName;
            Intent intent = pm.getLaunchIntentForPackage(packageName);
            intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon));
        }

        LabeledIntent[] extraIntents = intentList.toArray(new LabeledIntent[intentList.size()]);
        // Add the rest of the email apps to the picker selection
        openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
        startActivity(openInChooser);
    }

【讨论】:

  • 一开始这看起来像是非常可怕的代码,但它仍然有效!我为未安装邮件客户端的手机添加了 else 语句。
  • 此代码是我发现的唯一一个解决方案,可以帮助我打开电子邮件收件箱(无需编写新电子邮件),同时它为您提供了选择对话框,非常棒,谢谢拉里萨
  • 唯一有效的代码。你应该把它包装成一个助手,然后把它扔到 GitHub Gists 上。太好了!
  • 迄今为止最好的答案。创建所有可用电子邮件的选择器,单击时启动应用程序。
  • 对于较新版本的 android 和 kotlin,请查看此答案 stackoverflow.com/a/69043615/3289338
【解决方案2】:

没有标准的Intent 操作来打开“设备上的默认电子邮件客户端”的“收件箱视图”。

【讨论】:

  • 我可以使用任何标准意图操作来打开默认电子邮件客户端吗? (即使它不是收件箱视图 - 只需以与触摸主屏幕上的图标相同的方式启动应用程序)
  • 好的,谢谢你的信息。看起来我正在调用一个特定的包,然后。
【解决方案3】:

这个现在可以用了

   Intent intent = new Intent("android.intent.action.MAIN");
        intent.addCategory("android.intent.category.APP_EMAIL");
        startActivity(Intent.createChooser(intent, ""));

【讨论】:

  • 这只会打开 Gmail,不会为您选择的电子邮件应用打开选择器。
  • 好的,哪个安卓版本?我很确定去年我尝试它时它给了选择器,前提是您有多个声称可以使用 APP_EMAIL 的应用程序。
  • Nexus 5X API 28,像素 2 API 28
  • 安装三星电子邮件客户端后,我刚刚在 nexus 5x api 29 模拟器上尝试了此代码,它提供了两个电子邮件客户端之间的选择。从模拟器中卸载三星电子邮件客户端后,它将直接打开 gmail。您在模拟器中安装了哪些其他电子邮件客户端?也许它没有像它应该的那样实现意图的侦听器。
  • 我在模拟器上安装了雅虎邮箱作为应用程序。在我自己的三星 7 上,我也有 Outlook,它没有用这个版本打开。您是否尝试过早期的 api 级别?我建议您再试一次,因为它似乎没有按您想要的方式工作。
【解决方案4】:

你可以从你的活动对象中试试这个:

它不一定会直接将您带到收件箱,但会打开电子邮件应用程序:

Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.email");
startActivity(intent); 

【讨论】:

  • 如果 Android 电子邮件客户端是默认的电子邮件程序(很少出现这种情况),这个就可以了。如果不是,startActivity 会抛出异常。
  • 即使它是默认应用程序也无法正常工作。我记得有些 htc 手机的电子邮件包名称不同,例如“com.htc.android.email”。所以这行不通
猜你喜欢
  • 2011-07-12
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 2015-12-15
  • 1970-01-01
相关资源
最近更新 更多