在Android应用程序中点击按钮时如何打开Gmail Compose?

在Android应用程序中点击按钮时如何打开Gmail Compose?,android,gmail,Android,Gmail,当我在Android应用程序中点击一个按钮时,我正试图打开Gmail撰写屏幕。 我需要谷歌的API密钥吗?或者我需要在我的按钮侦听器中执行什么操作 非常感谢您的任何见解。我不知道您是否可以专门发布gmail。你试过这个吗 Intent emailIntent = new Intent(Intent.ACTION_SEND); emailIntent.setType("text/plain"); startActivity(emailIntent); 你可以在这里找到更多细节:正如JeffC

当我在Android应用程序中点击一个按钮时,我正试图打开Gmail撰写屏幕。 我需要谷歌的API密钥吗?或者我需要在我的按钮侦听器中执行什么操作


非常感谢您的任何见解。

我不知道您是否可以专门发布gmail。你试过这个吗

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

你可以在这里找到更多细节:

正如JeffC所指出的,你可以很容易地告诉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);
    }
 }
package com.stackoverflow.beekeeper;
导入android.app.Activity;
导入android.content.Intent;
导入android.content.pm.PackageManager;
导入android.content.pm.ResolveInfo;
导入android.os.Bundle;
导入java.util.List;
公共类StackOverflowTest扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(最终捆绑包savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
最终意图=新意图(android.content.Intent.ACTION\u SEND);
intent.setType(“文本/普通”);
最终PackageManager pm=getPackageManager();
最终列表匹配=pm.querytentActivities(intent,0);
ResolveInfo-best=null;
对于(最终解决方案信息:匹配项)
if(info.activityInfo.packageName.endsWith(“.gm”)||
info.activityInfo.name.toLowerCase().contains(“gmail”))best=info;
如果(最佳!=null)
intent.setClassName(best.activityInfo.packageName,best.activityInfo.name);
星触觉(意向);
}
}

如果您在这行中没有得到任何信息

final List matches=pm.querytentActivities(intent,0)

然后将此线路替换为


final List matches=pm.querytentActivities(intent,1)

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

我发现这里的重要部分是查找“packageName”和“activityInfo.name”

我只想使用gmail,没有选择者。请注意,包名是硬编码的,因此如果Gmail更改了它的packagename,它将不再工作

关键是setComponent,其中第一个参数是包名,第二个参数是activityInfo名

但就像我说的小心使用,我重复我自己;如果用户没有安装gmail应用程序,或者gmail更改其包名或活动名以发送电子邮件,此(硬)代码将中断。你的孩子已经被警告了;)

这是我的密码

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);
Intent myIntent=新意图(Intent.ACTION\u SEND);
PackageManager pm=getPackageManager();
Intent tempIntent=新意图(Intent.ACTION\u SEND);
tempIntent.setType(“*/*”);
List resInfo=pm.querytentActivities(tempIntent,0);
对于(int i=0;i
公共静态void openGmail(活动、字符串[]电子邮件、字符串主题、字符串内容){
意向emailIntent=新意向(Intent.ACTION\u SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL,EMAIL);
emailIntent.putExtra(Intent.EXTRA_SUBJECT,SUBJECT);
emailIntent.setType(“文本/普通”);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,content);
最终PackageManager pm=activity.getPackageManager();
最终列表匹配=pm.querytentActivities(emailIntent,0);
ResolveInfo-best=null;
对于(最终解决方案信息:匹配项)
if(info.activityInfo.packageName.endsWith(“.gm”)| | info.activityInfo.name.toLowerCase()包含(“gmail”))
最佳=信息;
如果(最佳!=null)
emailIntent.setClassName(best.activityInfo.packageName,best.activityInfo.name);
活动。开始触觉(emailIntent);
}

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

Intent Intent=new Intent(Intent.ACTION\u send).setType(“text/plain”)
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);
.putExtra(Intent.EXTRA_EMAIL,新字符串[]{emails}); 列表匹配项=activity.getPackageManager().QueryInputActivities(intent,0); ResolveInfo-best=null; 对于(ResolveInfo:matches){ if(info.activityInfo.packageName.endsWith(“.gm”)| | info.activityInfo.name.toLowerCase()包含(“gmail”)){ 最佳=信息; } } 如果(最佳!=null){ intent.setClassName(best.activityInfo.packageName,best.activityInfo.name); } 活动。开始触觉(意图);
您只需将下面的代码放入您的点击事件中。将以撰写模式直接打开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"));
<
<TextView
 android:id="@+id/EmailId"
 android:linksClickable="true"
 android:autoLink="email"
 android:text="info@stackoverflow.com"
 />
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);
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"));
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"));
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);
                }