Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓意向选择器_Android_Android Intent_Android Intent Chooser - Fatal编程技术网

Android 安卓意向选择器

Android 安卓意向选择器,android,android-intent,android-intent-chooser,Android,Android Intent,Android Intent Chooser,我正在创建一个应用程序,其中有一个Gmail按钮,当用户点击Gmail时,它会使用内置的Gmail客户端向特定的接收者发送邮件,但当用户点击Gmail按钮时,它会打开设备中安装的所有客户端的列表,例如hike、drive、email、Gmail等,用户会询问该选项 这是我的密码 protected void sendEmail() { Log.i("Send email", ""); String[] TO = {""}; Strin

我正在创建一个应用程序,其中有一个Gmail按钮,当用户点击Gmail时,它会使用内置的Gmail客户端向特定的接收者发送邮件,但当用户点击Gmail按钮时,它会打开设备中安装的所有客户端的列表,例如hike、drive、email、Gmail等,用户会询问该选项

这是我的密码

       protected void sendEmail() {
        Log.i("Send email", "");
        String[] TO = {""};
        String[] CC = {""};
        Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.setType("message/rfc822");   //should i have to change this line of code
        emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
        emailIntent.putExtra(Intent.EXTRA_CC, CC);
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Your subject");  //message subject
        emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message goes here");   //message content

        try {
            startActivity(Intent.createChooser(emailIntent,"Send mail..."));
            finish();
            Log.i("Finished sending email.", "");
        }
        catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(MailSenderActivity.this, "There is no email client installed.", Toast.LENGTH_SHORT).show();
        }
    }
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);

我想要的是,当用户点击Gmail按钮时,它只会打开内置的Gmail和电子邮件客户端,而不是hike等等。我怎样才能做到这一点(通过改变类型或什么?)。我尝试了很多方法,但都没有成功。

这只适用于gmail应用程序

Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setType("plain/text");
sendIntent.setData(Uri.parse("test@gmail.com"));
sendIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "test@gmail.com" });
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "test");
sendIntent.putExtra(Intent.EXTRA_TEXT, "hello. this is a message sent from my demo app :-)");
startActivity(sendIntent);
用于大量电子邮件:

sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "test@gmail.com" });
对于单个电子邮件:

sendIntent.setData(Uri.parse("test@gmail.com"));
您可以添加额外的“putExtra(Intent.extra..”,并根据需要更改“setType”。

这是我的代码

       protected void sendEmail() {
        Log.i("Send email", "");
        String[] TO = {""};
        String[] CC = {""};
        Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.setType("message/rfc822");   //should i have to change this line of code
        emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
        emailIntent.putExtra(Intent.EXTRA_CC, CC);
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Your subject");  //message subject
        emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message goes here");   //message content

        try {
            startActivity(Intent.createChooser(emailIntent,"Send mail..."));
            finish();
            Log.i("Finished sending email.", "");
        }
        catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(MailSenderActivity.this, "There is no email client installed.", Toast.LENGTH_SHORT).show();
        }
    }
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);

您可以使用以下代码重定向到Gmail,而无需请求其他电子邮件应用程序

final Intent intent = new Intent(Intent.ACTION_SEND);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.setType("plain/text");

        PackageInfo pInfo = null;
        try {
            pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        String version = "";
        if (pInfo != null) {
            version = pInfo.versionName;
        }

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

        intent.putExtra(Intent.EXTRA_EMAIL, "abc.gmail.com");
        intent.putExtra(Intent.EXTRA_SUBJECT,"subject here !");
        intent.putExtra(Intent.EXTRA_TEXT,"Body here !");
        startActivity(intent);
final Intent Intent=新意图(Intent.ACTION\u SEND);
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
intent.setType(“纯/文本”);
PackageInfo pInfo=null;
试一试{
pInfo=getPackageManager().getPackageInfo(getPackageName(),0);
}捕获(PackageManager.NameNotFounde异常){
e、 printStackTrace();
}
字符串版本=”;
if(pInfo!=null){
version=pInfo.versionName;
}
最终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);
intent.putExtra(intent.EXTRA_电子邮件,“abc.gmail.com”);
intent.putExtra(intent.EXTRA_SUBJECT,“SUBJECT here!”);
intent.putExtra(intent.EXTRA_文本,“Body here!”);
星触觉(意向);

Look at doesnt work,,…doesnt work,,,的可能重复项仍会显示整个客户端列表。此项工作可重定向到内置Gmail客户端,但仅限于此,我希望它请求发送电子邮件/GMAIl@neha如果你想这样做,那么你必须手动显示一个对话框来选择应用程序选择,,告诉我怎么办that@neha用两个按钮创建一个xml并将其设置到对话框中,然后相应地附加包名,即
intent.setPackage(“com.google.android.gm”)
。希望它能对您有所帮助。此intent.setPackage适用于gmail客户端na?我必须向用户索要电子邮件和gmail字符串recepientEmail=”abc@gmail.com"; // 设置为目标电子邮件或保留空的Intent Intent=新Intent(Intent.ACTION\u SENDTO);setData(Uri.parse(“mailto:+recepientEmail”);星触觉(意向);