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

Big*_*337 5 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.."));
Run Code Online (Sandbox Code Playgroud)

但似乎从这一行:shareIntent.setType("image/*");所有部分必须是相同的数据类型.如果我想发送一张图片(图片/ jpeg)和一个应该在标题(text/plain)中同时出现的标签?

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

Inn*_*pel 12

如果您的目标是与文本共享一张图片,这是我建议的代码:

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..."));
Run Code Online (Sandbox Code Playgroud)

  • Facebook很难这样.如果你想在Facebook上分享带有文字的图片,你必须使用facebook sdk.我认为它被称为故事.我认为它曾经是可能的,但他们故意删除了它. (2认同)

mat*_*ash 7

从问题是否要发送多个图像或仅发送单个图像,但是使用相关文本,这一点并不十分清楚.

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

使用ACTION_SEND_MULTIPLE并提供uris列表EXTRA_STREAM,如:

Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
Run Code Online (Sandbox Code Playgroud)

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

只使用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/*");
Run Code Online (Sandbox Code Playgroud)

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

shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
shareIntent.setType("*/*");
Run Code Online (Sandbox Code Playgroud)

ACTION_SEND_MULTIPLE(强调我的)文件:

支持多种类型,接收器应尽可能处理混合类型.接收方检查它们的正确方法是在每个URI上使用内容解析器.意图发送者应该尝试将最具体的mime类型放在intent类型中,但它可以回退到<type>/**/*根据需要.

例如,如果您要发送image/jpgimage/jpg,意图的类型可以是image/jpg,但如果您要发送image/jpgimage/png,然后意图的类型应该是image/*.

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