8

我需要显示多个文件(图像、音乐或视频各 2 个或更多,但只有一种类型)。给定一系列缩略图或文件名,用户应该能够选择复选框并预览选择。如果用户选择多个图像,我希望能够只显示那些选择的图像。如果他选择多个 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 将多个文件发送到外部应用程序?

4

1 回答 1

1

没有将 multible 发送到 ACTION_VIEW 的 android 标准。

但是ACTION_SEND_MULTIPLE有一个标准,其中文件通过 EXTRA_STREAM 传输。

有关工作的 sendmultible 示例,请参阅Secure-Photo-Viewer:您从图库应用程序中选择多个图像并将它们发送到 Secure-Photo-Viewer。

如果您的应用程序是此意图的唯一发送者和接收者,您也可以使用与 ACTION_VIEW 相同的机制。

要了解有关意图通信的更多信息,您可以使用意图拦截应用程序,该应用程序允许发送和接收多种类型的意图

这是我用来发送多个图像的代码

        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);
于 2018-06-19T05:47:22.353 回答