【发布时间】:2013-04-03 12:02:03
【问题描述】:
一开始你会想“等等,这个问题是重复的!”。继续阅读。
我正在尝试使用 Intent ACTION_SENDTO(以电子邮件 URI 作为数据)以便只是电子邮件应用程序响应。
(使用ACTION_SEND 启动标准的“SEND”选择器,没有数据 URI,这意味着非电子邮件应用程序(例如 Google Drive)也会响应)。
我的问题是附件适用于所有设备上的ACTION_SEND,但是 - 当使用ACTION_SENDTO 时,只有一些设备正确附加文件。 Nexus 7 可以工作,但三星 Galaxy Tab 和 Acer Iconia不能。
您可以在下面并排查看不同的方法:
String email = getActivity().getResources().getString(R.string.supportEmail);
String subject = getActivity().getResources().getString(R.string.sFeedback);
subject = String.format(subject,
getActivity().getResources().getString(R.string.productName));
String content = getActivity().getResources().getString(R.string.whatFeedbackWouldYouLikeToProvide) + "\n\n" +
mMessage.getText().toString();
File toSend = new File(outfile);
if(toSend.exists()) {
Log.e("Feedback", "File path: " + toSend.getAbsolutePath());
Intent emailIntent = new Intent(android.content.Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:" +email));
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.fromFile(toSend));
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, content);
/* Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("message/rfc822");
emailIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{email});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT , content);
emailIntent.putExtra(Intent.EXTRA_STREAM , Uri.fromFile(toSend)); */
try {
startActivity(emailIntent);
} catch (ActivityNotFoundException anfe) {
Toast.makeText(getActivity(), getResources().getString(R.string.pleaseInstallAnEmailClientInOrderToSendUsFeedback), 8000).show();
}
}
您可以看到文件路径似乎不是问题,我在一些记录中添加了报告:
三星给予:
04-11 11:40:09.953: E/Feedback(6286): File path: /storage/sdcard0/logs.zip
Nexus 给予:
04-11 11:38:59.249: E/Feedback(12702): File path: /storage/emulated/0/logs.zip
(均基于getExternalStorageDirectory()保证跨应用访问)。
有人知道为什么会这样吗?
【问题讨论】:
-
应该是
Uri.parse("mailto:" + email),但您在该行还缺少一个括号,因此可能是问题错字。 -
是的,抱歉,有问题。
-
filePath 中一定有问题,因为其余代码是正确的。只需交叉检查 URI 是否引用有效位置。其次,需要附加的文件不能在应用程序目录或缓存目录中。
-
查看已编辑的问题 - 如您所见,我添加了对现有文件的检查(以及记录绝对路径以确保其位于可行的位置)
-
你解决过这个问题吗?