我在设置类型“message / rfc822”时遇到问题,意图在 Android模拟器上发送电子邮件带文件附件。我必须使用setType(“message / rfc822”),因为文件没有标准的MIME类型(sqlite数据库),我试图避免选择列表中的很多应用程序供用户选择。 对于2.3.3之前的所有API级别,我有一个错误:
java.lang.RuntimeException:
Unable to start activity ComponentInfo{my.cashwatcher/my.cashwatcher.SendEmailActivity}:
android.content.ActivityNotFoundException:
No Activity found to handle Intent { act=android.intent.action.SEND typ=message/rfc822
(has extras) }
在API Level 2.3.3的情况下,代码工作正常并且不会出现错误。这是Android模拟器还是旧API的问题!?
代码:
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("message/rfc822");
sendIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{appPrefs.getEmail("email")});
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), DATABASE_PATH)));
sendIntent.putExtra(Intent.EXTRA_TEXT, "body_of_email");
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "APPLICATION_NAME");
startActivityForResult(sendIntent, EMAIL_SEND_RESULT);
答案 0 :(得分:8)
首先,“为了避免选择列表中的大量应用程序供用户选择”,请使用ACTION_SENDTO
和mailto:
Uri
。
其次,您遇到的不是“Android模拟器的问题”,也不是“旧的API”。您需要1个以上能够处理ACTION_SEND
Intent
和MIME类型message/rfc822
的应用程序。无法保证任何给定设备都支持该组合,更不用说任何给定的仿真器了。您的代码需要处理它,就像您使用ACTION_GOBBLEDYGOOK
或MIME类型thisis/sonotreal
或其他任何内容一样。
答案 1 :(得分:2)
我做了一个使用uri示例的应用程序,如你所愿: 我的函数已激活点击监听器 :
if(v.getId()==R.id.button3)
{
intent=new Intent(Intent.ACTION_SEND);
intent.setData(Uri.parse("mailto"));
String[]to={"akshkatheria@gmail.com","megakatheria@gmail.com"};
intent.putExtra(Intent.EXTRA_EMAIL, to);
intent.putExtra(Intent.EXTRA_SUBJECT, "hello");
intent.putExtra(Intent.EXTRA_TEXT, "hi");
intent.setType("message/rfc822");
chooser=intent.createChooser(intent, "send mail");
startActivity(chooser);
}
答案 2 :(得分:0)
这是解决方案。使用下面的代码,工作完美......得到了 研究后的解决方案.... :)
Intent testIntent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.parse(" mailto:?subject =" +" blah blah subject" +"& body =" +&# 34; blah blah body" +"& to =" +" sendme@me.com");
testIntent.setData(数据);
startActivity(testIntent);