我在Android模拟器上设置类型“消息/rfc822”以发送电子邮件带有文件附件时遇到问题。我必须使用 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级别的情况下,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);
首先,“为了避免选择列表中有很多应用程序供用户选择”,请使用
ACTION_SENDTO
和 mailto:
Uri
。
其次,您遇到的问题不是“Android模拟器的问题”,也不是“旧API的问题”。您需要 1 个以上能够处理
ACTION_SEND
Intent
和 MIME 类型 message/rfc822
的应用程序。无法保证任何给定的设备都支持该组合,更不用说任何给定的模拟器了。您的代码需要处理该问题,就像您使用 ACTION_GOBBLEDYGOOK
或 MIME 类型的 thisis/sonotreal
或其他内容一样。
我已经制作了一个根据您的需要使用 URI 示例的应用程序:
if(v.getId()==R.id.button3)
{
intent=new Intent(Intent.ACTION_SEND);
intent.setData(Uri.parse("mailto"));
String[]to={"[email protected]","[email protected]"};
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);
}
这就是解决方案。使用下面的代码,完美运行......得到了 研究后的解决方案......:)
Intent testIntent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.parse("mailto:?subject=" + "blah blah subject" + "&body=" +
"blah blah body" + "&to=" + "[email protected]");
testIntent.setData(data);
startActivity(testIntent);
改编自 dreamdevelope 和 Syed Rafaqat Hussain。
fun sendEmail(activity: AppCompatActivity,subject:String,body:String,email:String){
val testIntent = Intent(Intent.ACTION_VIEW)
val encodeSubject = java.net.URLEncoder.encode(subject, "utf-8")
val encodeBody = java.net.URLEncoder.encode(body, "utf-8")
val uriContent =buildString {
append("mailto:?subject=")
append(encodeSubject)
append("&body=")
append(encodeBody)
append("&to=")
append(email)
}
val data = Uri.parse(uriContent)
testIntent.data = data
activity.startActivity(testIntent)
}