使用shareIntent时,如何使用Intent.ACTION_SEND_MULTIPLE发送多种数据类型?

时间:2014-12-13 23:36:29

标签: android android-intent

在文档中很清楚,你可以发送多个数据:

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share images to.."));

但似乎从那一行:shareIntent.setType("image/*");所有部分都必须是相同的数据类型。如果我想发送图片(图片/ jpeg)和标题中应该附带的标签(text / plain),该怎么办?

如何在一个shareIntent中处理多种内容?是否可以将2个shareIntents发送到同一个活动?我该如何处理?

2 个答案:

答案 0 :(得分:10)

如果你的目标是与文字分享一张图片,这就是我建议的代码:

String text = "Look at my awesome picture";
Uri pictureUri = Uri.parse("file://my_picture");
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, text);
shareIntent.putExtra(Intent.EXTRA_STREAM, pictureUri);
shareIntent.setType("image/*");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share images..."));

答案 1 :(得分:7)

关于您是要发送多个图像还是仅发送一个图像,但是使用相关文本,问题并不完全清楚。

在第一种情况下(多个图像):

使用ACTION_SEND_MULTIPLE并将uris列表提供为EXTRA_STREAM,如下所示:

Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");

如果是第二种情况(图像加文字):

仅使用ACTION_SEND并提供 EXTRA_STREAM EXTRA_TEXT,例如:

Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, text);
shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
shareIntent.setType("image/*");

但是,如果您需要共享不同MIME类型的流(例如图片和其他附件),请使用更通用的MIME类型,例如*/*。例如:

shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
shareIntent.setType("*/*");

来自ACTION_SEND_MULTIPLE的文件(强调我的):

  

支持多种类型,接收者应处理混合类型   只要有可能。接收器检查它们的正确方法是   在每个URI上使用内容解析器。 意图发件人应该尝试   将最具体的mime类型放在intent类型中,但它可能会掉落   

返回<type>/**/*

     

e.g。如果您要发送image/jpgimage/jpg,则意图的类型可以   是image/jpg,但如果您要发送image/jpgimage/png,那么就是{。}}   意图的类型应为image/*

这适用于混合图像和下载的文件。