用于启动Gmail应用的Intent URI

San*_*ana 31 android

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

Jar*_*ows 70

这只适用于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);
Run Code Online (Sandbox Code Playgroud)

用于大量的电子邮件:

intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "test@gmail.com" });
Run Code Online (Sandbox Code Playgroud)

单个电子邮件:

intent.setData(Uri.parse("test@gmail.com"));
Run Code Online (Sandbox Code Playgroud)

您可以添加extra putExtra(Intent.EXTRA..) 和更改setType用于您的目的.:P

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

请参阅从Android上的其他应用程序启动应用程序

在此输入图像描述

  • 存在downvotes,因为手动将包设置为"com.google.android.gm"没有记录,并且如果包名称发生更改或未安装,则可能会中断. (3认同)
  • java.lang.SecurityException:Permission Denial:启动Intent {act = android.intent.action.VIEW dat = test@gmail.com cmp = com (3认同)

kat*_*oft 39

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

Intent mailClient = new Intent(Intent.ACTION_VIEW);
mailClient.setClassName("com.google.android.gm", "com.google.android.gm.ConversationListActivity");
startActivity(mailClient);
Run Code Online (Sandbox Code Playgroud)

  • 这是无证的,没有支持,并且可能在将来很好地破坏. (26认同)
  • 第二个参数(`className`)是写作时的"com.google.android.gm.ConversationListActivityGmail"(Gmail v6.7,Marshmallow). (6认同)
  • 定位API 17我得到一个`android.content.ActivityNotFoundException:无法找到显式活动类{com.google.android.gm/com.google.android.gm.ConversationListActivity}; 你有没有在AndroidManifest.xml中声明这个活动?`有什么想法吗? (4认同)
  • 现在它不工作....可以使用:Intent intent = getPackageManager().getLaunchIntentForPackage("com.google.android.gm"); startActivity(意向); (2认同)

Aji*_*ana 17

建议不要使用包名作为未记录的方法.如果包名称某天更改,代码将失败.

请尝试使用此代码

 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));
Run Code Online (Sandbox Code Playgroud)

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


Ric*_*tte 15

用这个:

Intent intent = getPackageManager().getLaunchIntentForPackage("com.google.android.gm");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

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


Com*_*are 14

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


San*_*ana 12

后来需求变为启动"电子邮件应用程序",因此以下代码基本上启动了一个电子邮件应用程序,用户必须在显示的选项中进行选择.

所以,我不得不使用

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, ""));
Run Code Online (Sandbox Code Playgroud)


Cop*_*oad 9

简单,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();
Run Code Online (Sandbox Code Playgroud)


Ste*_*neT 8

这个技巧适用于所有版本(API 3+),以及text/plain或text/html(by 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);
Run Code Online (Sandbox Code Playgroud)


Sun*_*nil 7

试试这个

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

try {
    Intent intent = new Intent (Intent.ACTION_VIEW , Uri.parse("mailto:" + "your_emailid@gmail.com"));
    intent.putExtra(Intent.EXTRA_SUBJECT, "your_subject");
    intent.putExtra(Intent.EXTRA_TEXT, "your_text");
    startActivity(intent);
} catch(Exception e) {
    Toast.makeText(Share.this, "Sorry...You don't have any mail app", Toast.LENGTH_SHORT).show();
    e.printStackTrace(); 
}
Run Code Online (Sandbox Code Playgroud)

注意

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


Mas*_*ono 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);
Run Code Online (Sandbox Code Playgroud)