如何在Android App中单击按钮时打开Gmail撰写?

时间:2010-10-14 15:44:49

标签: android gmail

我想在Android应用中点击按钮时打开Gmail Compose屏幕。 我需要一些来自Google的API密钥吗?或者我的按钮onClickListener需要做什么?

非常感谢任何形式的见解。

11 个答案:

答案 0 :(得分:43)

正如JeffC指出的那样,很容易告诉Android你想要发送类似电子邮件的东西,让Android给用户一个选择列表,其中可能包括GMail。如果你特别想要GMail,你必须要有点聪明。 (请注意,正确的MIME类型实际上是“text / plain”,而不是“plain / text”。对于实现奇怪,GMail似乎是唯一响应后者的活动,但这不是我会做的行为依靠。)

以下应用程序演示了您可以遵循的原则:实际检查所有可以处理您的SEND意图的活动,看看它们是否看起来像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);
    }
 }

答案 1 :(得分:36)

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
}

答案 2 :(得分:35)

我不知道你可以专门启动gmail。你有没有在onClickListener

中尝试过这个
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
startActivity(emailIntent);  

您可以在此处找到更多详细信息:Email android intent

答案 3 :(得分:3)

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

答案 4 :(得分:2)

<TextView
 android:id="@+id/EmailId"
 android:linksClickable="true"
 android:autoLink="email"
 android:text="info@stackoverflow.com"
 />

这是点击textView发送电子邮件的最佳方法。

答案 5 :(得分:2)

您只需在代码中放置以下代码即可。将直接打开gmail作为撰写模式,输出截图如下。

快乐编码: - )

代码:

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

输出

enter image description here

答案 6 :(得分:1)

此代码将直接启动gmail应用程序以发送电子邮件。

我发现使用this post,这里的重要部分是找到“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);

答案 7 :(得分:1)

您可以使用简单的Intent.ACTION_SEND意向 为电子邮件数组设置Intent.EXTRA_EMAIL 在电子邮件编辑器中为主题行设置Intent.EXTRA_SUBJECT 在此处探索更多可用的额外选项-> https://developer.android.com/guide/components/intents-common#Email

这是一个快速的代码段

Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("*/*");
                intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"test@gmail.com"});
                intent.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
                if (intent.resolveActivity(ctx.getPackageManager()) != null) {
                    startActivity(intent);
                }

答案 8 :(得分:0)

如果你在这一行中没有得到任何东西

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

然后用

替换这一行

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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"));