Android电子邮件选择器

时间:2010-10-20 14:57:30

标签: android email android-intent

我正在编写一个需要在每笔交易结束时发送电子邮件的应用。我正在做以下事情:

Intent mail = new Intent(Intent.ACTION_SEND);
mail.setType("text/html");
mail.putExtra(Intent.EXTRA_EMAIL, new String[] { emailTo });
mail.putExtra(Intent.EXTRA_SUBJECT, "Send from Android");
mail.putExtra(Intent.EXTRA_TEXT, "Sent from Android");
startActivity(Intent.createChooser(mail,"Select Email Software..."));

我想要做的是预先选择电子邮件软件并将其存储在设置中。这样,每次发送电子邮件时,都不必询问用户使用哪个电子邮件。我似乎无法弄清楚如何调用选择器并获得所选值。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:7)

使用text/plaintext/html是一种常见的误解。这将触发任何可以处理普通或HTML文本文件而无任何上下文的应用程序,包括Google Drive,Dropbox,Evernote和Skype。

而是使用ACTION_SENDTO,提供mailto: Uri:

intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));

然后,您可以按照其他答案的建议继续使用选择器。

答案 1 :(得分:4)

以下是解决方案:

private void setSpinnerValues() {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/html");
    PackageManager pm = getPackageManager();
    emailers = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_RESOLVED_FILTER);

    if (emailers.size() == 0) {
        spnEmailProgram.setEnabled(false);
        return;
    }
    spnEmailProgram.setEnabled(true);
    CharSequence[] sa = new CharSequence[emailers.size()];
    int lastPosition = 0;
    for (int i = 0; i < emailers.size(); i++) {
        ResolveInfo r = emailers.get(i);
        sa[i] = pm.getApplicationLabel(r.activityInfo.applicationInfo);
        if (r.activityInfo.name.equalsIgnoreCase(Options.EmailClass)) {
            lastPosition = i;
        }
    }
    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this,
            android.R.layout.simple_spinner_item, sa);
    adapter.
              setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spnEmailProgram.setAdapter(adapter);
    spnEmailProgram.setSelection(lastPosition);
}

保存选择供以后使用:

    if (emailers.size() == 0) {
        Options.EmailProgram = "";
        Options.EmailClass = "";
    } else {
        ResolveInfo r = emailers.get(spnEmailProgram.getSelectedItemPosition());
        Options.EmailProgram = r.activityInfo.packageName;
        Options.EmailClass = r.activityInfo.name;
    }

现在,要消费它,只需要以下内容:

Intent mail = new Intent(Intent.ACTION_SEND);
mail.setType("text/html");
Intent chooser = null;
if (Options.EmailProgram!=null && Options.EmailProgram.length()>0) {
  mail.setClassName(Options.EmailProgram,Options.EmailClass);
  chooser = mail;
}

填写其余数据并开始活动

if (chooser == null) {
  chooser = Intent.createChooser(mail,"Select Email Software..."); 
}
startActivity(chooser);

答案 2 :(得分:2)

您必须创建自己的选择器,可能使用在AlertDialog上调用queryIntentActivities()的结果填充PackageManager

相关问题