Как открыть Gmail Compose при нажатии кнопки в приложении Android? - PullRequest
18 голосов
/ 14 октября 2010

Я пытаюсь открыть экран Gmail Compose при нажатии кнопки в моем приложении для Android.Нужен ли мне ключ API для этого от Google?или что мне нужно сделать в моей кнопке onClickListener?

Любое понимание очень ценится.

Ответы [ 10 ]

43 голосов
/ 14 октября 2010

Как отметил Джефф, по сути, Android легко сказать, что вы хотите отправить что-то наподобие электронной почты, и пусть Android предоставит пользователям список вариантов, который, вероятно, будет включать GMail. Если вы специально хотите GMail, вы должны быть немного умнее. (Обратите внимание, что правильный MIME-тип на самом деле «text / plain», а не «plain / text». Принимая во внимание странность реализации, GMail, похоже, является единственным действием, которое реагирует на последнее, но это не то поведение, которое я хотел бы рассчитывать на.)

Следующее приложение демонстрирует принцип, которому вы можете следовать: на самом деле изучите все действия, которые говорят, что они могут обработать ваше намерение ОТПРАВИТЬ, и посмотрите, выглядит ли какое-либо из них как GMail.

package com.stackoverflow.beekeeper;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;

import java.util.List;

public class StackOverflowTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Intent intent = new Intent(android.content.Intent.ACTION_SEND);
        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;
        if (best != null)
           intent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
        startActivity(intent);
    }
 }
36 голосов
/ 28 сентября 2012
try{    
    Intent intent = new Intent (Intent.ACTION_VIEW , Uri.parse("mailto:" + "your_email"));
    intent.putExtra(Intent.EXTRA_SUBJECT, "your_subject");
    intent.putExtra(Intent.EXTRA_TEXT, "your_text");
    startActivity(intent);
}catch(ActivityNotFoundException e){
    //TODO smth
}
35 голосов
/ 14 октября 2010

Я не знаю, что вы можете специально запустить Gmail.Вы пробовали это в вашем onClickListener

Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
startActivity(emailIntent);  

Более подробную информацию вы можете найти здесь: Email android intent

4 голосов
/ 07 ноября 2017

Вы просто размещаете код под событием клика.Откроется непосредственно Gmail в режиме создания, скриншот вывода прилагается ниже.

Счастливое кодирование: -)

код:

Intent intent=new Intent(Intent.ACTION_SEND);
String[] recipients={"mailto@gmail.com"};
intent.putExtra(Intent.EXTRA_EMAIL, recipients);
intent.putExtra(Intent.EXTRA_SUBJECT,"Subject text here...");
intent.putExtra(Intent.EXTRA_TEXT,"Body of the content here...");
intent.putExtra(Intent.EXTRA_CC,"mailcc@gmail.com");
intent.setType("text/html");
intent.setPackage("com.google.android.gm");
startActivity(Intent.createChooser(intent, "Send mail"));

Выход:

enter image description here

3 голосов
/ 17 марта 2016
public static void openGmail(Activity activity,String[] email, String subject, String content) {
    Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.putExtra(Intent.EXTRA_EMAIL, email);
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, content);
    final PackageManager pm = activity.getPackageManager();
    final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
    ResolveInfo best = null;
    for(final ResolveInfo info : matches)
        if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
            best = info;
    if (best != null)
        emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);

    activity.startActivity(emailIntent);
}
2 голосов
/ 07 ноября 2017
<TextView
 android:id="@+id/EmailId"
 android:linksClickable="true"
 android:autoLink="email"
 android:text="info@stackoverflow.com"
 />

Это лучший способ отправить электронное письмо по щелчку textView.

1 голос
/ 06 ноября 2015

Этот код запускает приложение gmail для отправки электронного письма.

Я узнал, используя этот пост , что важной частью здесь является поиск "packageName" и "activityInfo.name"

Я хотел использовать только gmail без выбора. Обратите внимание, что имя пакета жестко запрограммировано, поэтому, если Gmail изменит свое имя пакета, оно больше не будет работать.

Ключом к этому был setComponent, где первый параметр - это имя пакета, а второй параметр - имя ActivityInfo.

Но, как я сказал, используйте с осторожностью, я повторяюсь; если у пользователя не установлено приложение gmail, или gmail меняет имя своего пакета или имя Activty для отправки электронного письма, этот (жесткий) код сломается. Твои были предупреждены;)

Вот мой код

Intent myIntent = new Intent(Intent.ACTION_SEND);

PackageManager pm = getPackageManager();
Intent tempIntent = new Intent(Intent.ACTION_SEND);
tempIntent.setType("*/*");
List<ResolveInfo> resInfo = pm.queryIntentActivities(tempIntent, 0);
for (int i = 0; i < resInfo.size(); i++) {
    ResolveInfo ri = resInfo.get(i);
    if (ri.activityInfo.packageName.contains("android.gm")) {
        myIntent.setComponent(new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name));
        myIntent.setAction(Intent.ACTION_SEND);
        myIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"exampleto@gmail.com"});
        myIntent.setType("message/rfc822");
        myIntent.putExtra(Intent.EXTRA_TEXT, "extra text");
        myIntent.putExtra(Intent.EXTRA_SUBJECT, "Extra subject");
        myIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("uri://your/uri/string");
    }
}
startActivity(myIntent);
0 голосов
/ 11 июня 2019
Intent intent = new Intent(Intent.ACTION_SEND);
        String[] recipients = {"recipient@gmail.com"};//Add multiple recipients here
        intent.putExtra(Intent.EXTRA_EMAIL, recipients);
        intent.putExtra(Intent.EXTRA_SUBJECT, "Mail Subject"); //Add Mail Subject
        intent.putExtra(Intent.EXTRA_TEXT, "Enter your mail body here...");//Add mail body
        intent.putExtra(Intent.EXTRA_CC, "mailcc@gmail.com");//Add CC emailid's if any
        intent.putExtra(Intent.EXTRA_BCC, "mailbcc@gmail.com");//Add BCC email id if any
        intent.setType("text/html");
        intent.setPackage("com.google.android.gm");//Added Gmail Package to forcefully open Gmail App
        startActivity(Intent.createChooser(intent, "Send mail"));
0 голосов
/ 07 ноября 2017
Intent intent = new Intent(Intent.ACTION_SEND).setType("text/plain")
                        .putExtra(Intent.EXTRA_EMAIL, new String[]{emails});
                List<ResolveInfo> matches = activity.getPackageManager().queryIntentActivities(intent, 0);
                ResolveInfo best = null;
                for (ResolveInfo info : matches) {
                    if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail")) {
                        best = info;
                    }
                }
                if (best != null) {
                    intent.setClassName(best.activityInfo.packageName,best.activityInfo.name);
                }
                activity.startActivity(intent);
0 голосов
/ 24 января 2013

если вы ничего не получите в этой строке

final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 0);

затем замените эту строку на

final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 1);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...