意图在2.3.3之前的Android API级别的setType(“message / rfc822”)

时间:2011-11-26 17:19:44

标签: android email android-intent android-emulator

我在设置类型“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);

3 个答案:

答案 0 :(得分:8)

首先,“为了避免选择列表中的大量应用程序供用户选择”,请使用ACTION_SENDTOmailto: 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);