Намеренный URI для запуска приложения Gmail - PullRequest
30 голосов
/ 12 августа 2010

Есть ли URI, который может указать на приложение GMAIL в Android и помочь мне запустить его?

Ответы [ 17 ]

68 голосов
/ 17 сентября 2011

Это работает только для приложения 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

Обновление (22.01.14): Важно отметить, что если вы собираетесь использовать этот код, убедитесь, что у пользователя установлен пакет «com.google.android.gm» на его устройстве. На любом языке обязательно проверяйте нулевое значение в определенных строках и инициализациях.

См. Запуск приложения из другого приложения на Android

enter image description here

35 голосов
/ 28 августа 2010

Я использую это в своих приложениях:

Intent mailClient = new Intent(Intent.ACTION_VIEW);
mailClient.setClassName("com.google.android.gm", "com.google.android.gm.ConversationListActivity");
startActivity(mailClient);
14 голосов
/ 11 февраля 2014

Использование имени пакета не рекомендуется в качестве недокументированного метода.В случае, если имя пакета изменится однажды, код не удастся выполнить.

Попробуйте вместо этого использовать код

 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\

13 голосов
/ 31 августа 2011

Используйте это:

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

Это может зависеть от уровня устройства и API.Используйте с осторожностью.

13 голосов
/ 12 августа 2010

Нет документированных и поддерживаемых Intent для запуска Gmail - извините!

11 голосов
/ 20 июня 2011

Позже требования изменились на запуск «приложения электронной почты», поэтому приведенный ниже код в основном запускает приложение электронной почты, и пользователь должен выбрать один из предложенных вариантов.

Итак, мне пришлось использовать

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, ""));
7 голосов
/ 14 февраля 2017

Простой и 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 голосов
/ 12 марта 2013

Этот трюк работает для ВСЕХ версий (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);
6 голосов
/ 29 июня 2017

Попробуйте это

Я пробовал много решений, но, наконец, у меня появился правильный способ, который отлично работает для меня

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(); 
}

Примечание

  • Откроется установленное почтовое приложение ( Электронная почта , Gmail ) для отправки почты, в которой вы можете выбрать одно из них. .
  • Не используйте прямое имя пакета, например ("com.google.android.gm"), потому что в будущем, если они изменят имя пакета, у вашего приложения возникнут проблемы.
5 голосов
/ 29 января 2015

Работает.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...