用于启动Gmail应用的Intent URI

时间:2010-08-12 16:49:57

标签: android

是否有任何URI可以指向Android中的GMAIL应用程序并帮我启动它?

19 个答案:

答案 0 :(得分:68)

这只适用于gmail应用程序。

final Intent intent = new Intent(Intent.ACTION_VIEW)
    .setType("plain/text")
    .setData(Uri.parse("test@gmail.com"))
    .setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail")
    .putExtra(Intent.EXTRA_EMAIL, new String[]{"test@gmail.com"})
    .putExtra(Intent.EXTRA_SUBJECT, "test")
    .putExtra(Intent.EXTRA_TEXT, "hello. this is a message sent from my demo app :-)");
startActivity(intent);

使用大量电子邮件:

intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "test@gmail.com" });
单个电子邮件

intent.setData(Uri.parse("test@gmail.com"));

您可以添加extra putExtra(Intent.EXTRA..)并更改setType以达到您的目的。 :P

更新(2014年1月22日): 请务必注意,如果您要使用此代码,请检查以确保用户的设备上安装了“com.google.android.gm”软件包。在任何语言中,请确保检查特定字符串和初始化的空值。

请参阅Launch an application from another application on Android

enter image description here

答案 1 :(得分:35)

我在我的应用中使用此功能:

Intent mailClient = new Intent(Intent.ACTION_VIEW);
mailClient.setClassName("com.google.android.gm", "com.google.android.gm.ConversationListActivity");
startActivity(mailClient);

答案 2 :(得分:13)

启动Gmail时没有记录和支持的Intent - 抱歉!

答案 3 :(得分:13)

建议不要使用包名作为未记录的方法。如果包名称在某一天发生变化,代码将失败。

尝试使用此代码

 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
 "mailto", "abc@gmail.com", null));
 emailIntent.putExtra(Intent.EXTRA_SUBJECT, "This is my subject text");
 context.startActivity(Intent.createChooser(emailIntent, null));

价: http://developer.android.com/reference/android/content/Intent.html#ACTION_SENDTO \

答案 4 :(得分:12)

使用此:

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

这可能取决于设备和API级别。小心使用。

答案 5 :(得分:11)

后来要求更改为启动“电子邮件应用”,因此以下代码基本上启动了一个电子邮件应用,用户必须在显示的选项中进行选择。

所以,我必须使用

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_SUBJECT, "Emailing link");
intent.putExtra(Intent.EXTRA_TEXT, "Link is \n" +
        "This is the body of hte message");
startActivity(Intent.createChooser(intent, ""));

答案 6 :(得分:7)

简单且100%正常工作

Intent intent = new Intent (Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"anyMail@gmail.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, "Any subject if you want");
intent.setPackage("com.google.android.gm");
if (intent.resolveActivity(getPackageManager())!=null)
    startActivity(intent);
else
    Toast.makeText(this,"Gmail App is not installed",Toast.LENGTH_SHORT).show();

答案 7 :(得分:7)

这个技巧适用于所有版本(API 3+),以及 text / plain text / html sonida):

Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setType("text/html");
// intent.setType("text/plain");
final PackageManager pm = getPackageManager();
final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 0);
ResolveInfo best = null;
for (final ResolveInfo info : matches) {
    if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail")) {
        best = info;
        break;
    }
}
if (best != null) {
    intent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
}
intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "YOUR SUBJECT");
intent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml("YOUR EXTRAS"));

startActivity(intent);

答案 8 :(得分:6)

试试这个

我尝试了很多解决方案,但最后我得到了一个对我来说很好的正确方法

android:background="@{questionMode.correct ? @color/slp_color_ebfde5 : @color/slp_color_ffeded}"

注意

  • 这将打开已安装的邮件应用程序( 电子邮件 Gmail )以发送您可以使用的邮件选择其中一个。
  • 请勿使用直接包名称(&#34; com.google.android.gm&#34;),因为将来如果他们更改包名称,您的应用将面临问题。

答案 9 :(得分:5)

有效。

Intent intent = new Intent(Intent.ACTION_SEND);

String[] strTo = { getString(R.string.mailto) };

intent.putExtra(Intent.EXTRA_EMAIL, strTo);
intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.mail_subject));
intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.mail_body));

Uri attachments = Uri.parse(image_path);
intent.putExtra(Intent.EXTRA_STREAM, attachments);

intent.setType("message/rfc822");

intent.setPackage("com.google.android.gm");

startActivity(intent);

答案 10 :(得分:1)

最好的方法是使用通用方法/方法:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_SUBJECT, "Email Subject goes here");
intent.putExtra(Intent.EXTRA_TEXT, "Your Message goes here");
startActivity(Intent.createChooser(intent, ""));

这将为用户提供一个选择,使他们可以选择GMail(如果已安装)或他们拥有的任何其他电子邮件支持应用程序。

答案 11 :(得分:0)

是的,它的工作代码完美.....

            Intent intent = new Intent(Intent.ACTION_SEND);
            String[] strTo = { "test@g.com" };
            intent.putExtra(Intent.EXTRA_EMAIL, strTo);
            intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
            intent.putExtra(Intent.EXTRA_TEXT, "Body");
            intent.setType("message/rfc822");
            intent.setPackage("com.google.android.gm");
            startActivity(intent);

答案 12 :(得分:0)

请检查以下代码,它将自动打开默认邮件编辑器。

try {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_APP_EMAIL);
        context.startActivity(intent);
} catch (android.content.ActivityNotFoundException anfe) {
        handleException();
}

答案 13 :(得分:0)

此答案很旧,但仍会出现在Google搜索的第一个位置。

因此,从Android文档中,现在更好的方法是:

public void composeEmail(String[] addresses, String subject, Uri attachment) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_STREAM, attachment);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

}

更多信息可以在here

找到

答案 14 :(得分:0)

startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"+mailId)));

答案 15 :(得分:0)

像我这样的工作很简单:

 Intent(Intent.ACTION_SEND).apply{
            setPackage("com.google.android.gm")
            type = "text/plain"
            putExtra(Intent.EXTRA_TEXT, "Go, go share text!")
        }.also{readyIntent->
            startActivity(readyIntent)
        }

答案 16 :(得分:0)

final String package = "com.google.android.gm";
// return true if gmail is installed
boolean isGmailInstalled = isAppInstalled(MainActivity.this, package);

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"mail@gamil.com"});
if (isGmailInstalled) {
    intent.setType("text/html");
    intent.setPackage(package);
    startActivity(intent);
} else {  // allow user to choose a different app to send email with
    intent.setType("message/rfc822");
    startActivity(Intent.createChooser(intent, "choose an email client"));
}

// Method to check if app is installed
private boolean isAppInstalled(Context context, String packageName) {
    try {
        context.getPackageManager().getApplicationInfo(packageName, 0);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}

答案 17 :(得分:0)

此代码段将打开一个选择器,该选择器应指向Gmail收件箱。

df.where($"dt" >= "2011-01-01")

答案 18 :(得分:0)

Intent mailClient = new Intent(Intent.ACTION_VIEW);             mailClient.setClassName(“ com.google.android.gm”,“ com.google.android.gm.ConversationListActivityGmail”);             startActivity(mailClient);