我正在尝试将多个图片添加到电子邮件意图中。这是我一直在使用的代码。
final ArrayList<Uri> uris = new ArrayList<>();
for (int i = 0; i < form.getImageContainers().size(); i++)
uris.add(Uri.fromFile(new File(form.getImageContainers().get(i).getImagePath())));
final Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"))
.putExtra(Intent.EXTRA_EMAIL, "pdlmob@auburn.edu")
.putExtra(Intent.EXTRA_SUBJECT, "Sample Submission (Beta Test)")
.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(buildBody()));
.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(Intent.createChooser(emailIntent, "Send email..."));
但它没有附加任何内容,只是正文和其他所有内容。
我尝试用此行替换.putParcelableArrayListExtra
来获取单个图片
.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(form.getImageContainers().get(0).getImagePath())));
它确实附加了图像,所以我可以告诉存储路径的字符串没有错。不幸的是,我不能遍历并只为每个图像使用该行,因为它只使用最后一行(尝试过)。我已经阅读了使用此方法的答案,以及其他使用Intent.ACTION_SEND_MULTIPLE
的答案,但这给了我一个空的选择器,告诉我我没有任何可以执行此操作的应用程序。
为什么它无法正常工作?
答案 0 :(得分:0)
我正在尝试将多个图片添加到电子邮件意图
ACTION_SEND
不支持多个流。 ACTION_SEND_MULTIPLE
does。因此,当ACTION_SEND
应用尝试获取EXTRA_STREAM
时,他们会崩溃或返回null
,因为他们不会调用getParcelableArrayListExtra()
或等效的,因为他们期待值为Uri
,而不是ArrayList
个Parcelable
个对象。
我已经阅读了使用此方法的答案,以及其他使用Intent.ACTION_SEND_MULTIPLE的答案,但这给了我一个空的选择器,告诉我我没有任何可以执行该操作的应用程序。
这是因为你没有任何可以执行操作的应用程序。仅仅因为应用支持ACTION_SEND
并不意味着他们必须支持ACTION_SEND_MULTIPLE
。
答案 1 :(得分:0)
解决方案是使用ACTION_SEND_MULTIPLE
和setType("text/plain")
,所以我的第一行现在看起来像
final Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE).setType("text/plain")