Intent.ACTION_VIEW - 多个文件

时间:2013-03-24 16:57:14

标签: android android-intent

我需要显示多个文件(每个图像,音乐或视频各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将多个文件发送到外部应用程序?

1 个答案:

答案 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);