我需要显示多个文件(每个图像,音乐或视频各2个或更多,但只有一个类型)。给定一系列缩略图或文件名,用户应该能够选择chekbox并预览选择。如果用户选择多个图像,我希望能够仅显示所选择的图像。如果他选择了多个mp3文件,我希望能够只播放那些歌曲。
如果用户只选择一个文件,那很容易做到:
Intent i = new Intent(Intent.ACTION_VIEW);
if (someType == IMAGE) {
i.setDataAndType(Uri.fromFile(imageFile),"image/*");
}
else
if (sometype == VIDEO) {
i.setDataAndType(Uri.fromFile(videoFile),"video/mp4");
}
else if (someType == MUSIC) {
i.setDataAndType(Uri.fromFile(musicFile),"audio/mpeg");
}
startActivity(i);
但是,如果用户选择一种类型中的两种或更多种类,我如何设计使用用户可能安装的任何图像/音频/视频应用的意图?我不想写自定义播放器/观众,因为我知道现有的应用可以做到这一点。
我正在尝试模仿名为“AllShare Play”(https://www.samsung.com/us/2012-allshare-play/)的云应用程序的功能。这个应用程序正是我需要在我的应用程序中执行的操作 - 允许用户“预览”多个文件并仅使用标准的“图库”应用程序用于图像,标准音乐应用程序用于歌曲等。在每种情况下,只选择文件使用每个Android设备加载的标准应用程序显示或播放,所以我知道可以不用编写查看器或播放器。
任何人都有任何想法如何通过Intent.ACTION_VIEW将多个文件发送到外部应用程序?
答案 0 :(得分:0)
对于ACTION_VIEW,发送multible没有android标准。
但ACTION_SEND_MULTIPLE有一个标准,文件通过EXTRA_STREAM传输。
对于有效的sendmultible示例,请参阅Secure-Photo-Viewer:您从图库应用中选择多个图像并将其发送到Secure-Photo-Viewer。
如果您的应用是此意图的唯一发件人和收件人,您也可以使用与ACTION_VIEW相同的机制。
要了解有关意向通信的更多信息,您可以使用允许发送和接收多种意图的intent-intercept应用
这是我用来发送多图像的代码
Intent sendIntent = new Intent();
sendIntent.setType("image/*");
if (selectionCount == 1) {
Long imageId = mSelectedItems.first();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(EXTRA_STREAM, getUri(imageId));
} else {
sendIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
ArrayList<Uri> uris = new ArrayList<Uri>();
for (Long mSelectedItem : mSelectedItems) {
uris.add(getUri(mSelectedItem));
}
sendIntent.putParcelableArrayListExtra(EXTRA_STREAM, uris);
}
startActivity(sendIntent);