Java和Android:如何使用Intent打开多个文件?

6

我相信这是一个简单的问题,但是我没能找到答案。

我正在制作一款Android应用程序,我想打开图像查看器来显示多张图片。我知道如何使用一张图片做到这一点:

    Intent intent = new Intent();  
    intent.setAction(android.content.Intent.ACTION_VIEW);
    File file1 = new File("/mnt/sdcard/photos/20397a.jpg");
    intent.setDataAndType(Uri.fromFile(file1), "image/jpg");
    startActivity(intent);

这个方案运行良好。但是如何将多张图片传递给查看器呢?
谢谢! L.
3个回答

1
您需要将您想要查看的所有文件列在一个数组中。然后,您显示其中一个数组,并在拖动时显示下一张图片。
ArrayList list;

private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // Ansi date format

list = new ArrayList();  
  String path = "c:/temp/";  
  File dir = new File(path);   
  for (String dirListing : dir.list()) {
    if ((dirListing.endsWith(".jpg")) ||
      (dirListing.endsWith(".png")) || 
      (dirListing.endsWith(".gif"))) {
      try { // write all file-info to a arraylist
        File f = new File(path+dirListing);      
        list.add(f.getCanonicalPath()); 
        list.add(f.getName());
        list.add(String.valueOf(f.length()));
        String lastModified = dateFormat.format(new Date(f.lastModified()));
        list.add(lastModified);
      }
      catch (IOException e) {
        e.printStackTrace();
      }
      catch (IndexOutOfBoundsException e) {
        e.printStackTrace();
      }
    }
  }

现在您可以读取该数组并逐个显示。

抱歉,我不太明白。您的意思是使用类似于 intent.setDataAndType(Uri.fromList(list), "image/jpg"); 这样的东西吗?(我知道 Uri.fromList 不存在...) - Luis A. Florit
你提供的示例仅用于一次显示一张图片。我提供的示例代码会读取一个文件夹并选择所有需要显示的(图像)文件。在你的程序中,你需要读取ArrayList(名为list)并获取路径+文件名以显示它们。当你在Android设备上拖动时,需要读取下一张照片。我通常使用Processing编写我的代码,因此无法提供正确的工作代码。 - Dippo
是的,我理解了你的代码。我不明白的是缺少了什么,即"意图..."部分。你构建了一个文件列表,但如何在查看器中显示它们呢?有哪个命令可以显示文件列表或播放一组歌曲呢?(我的真实代码已经提供了一个文件列表,所以这不是问题)。 - Luis A. Florit
那么,你的意思是每次拖动时只重用我的原始代码吗?(我看不出你的代码和我的有什么区别)。这样会不会打开一个新的查看器实例?抱歉,如你所见,这是我第一次为Android编写代码... :) - Luis A. Florit
啊哈,一个小提示。我使用Processing,因为它可以让我的PC / linux / Mac上运行的代码,在我满意后,我将其转换为Android代码(也是Processing中的)。然而,问题在于Android工作方式有些不同。例如,在Android中,你没有鼠标。但除此之外,它比Android Java更容易理解。 - Dippo
显示剩余5条评论

1

不要使用硬编码的路径。

将此行更改为:

File file1 = new File("/mnt/sdcard/photos/20397a.jpg");

to

File sdDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

它将定位到


/storage/emulated/0/Picture

你可以删除Environment.DIRECTORY_PICTURES,如果你想要sdcard的父目录。
因为你指定了单个文件20397a.jpg,所以你无法看到其他图片。
如果你想要查看除了图片之外的其他内容,那么将'image/jpg'改为'image/*'。

1
我想打开图像查看器。
在Android中没有“图像查看器”。设备和用户可能有许多不同的应用程序,可以查看从本地文件加载的image/jpeg文件。
但是,如何将多个图像传递给查看器呢?
很抱歉,没有标准的Intent来打开任何类型的多个文件。
此外,请不要在您的应用程序中硬编码/mnt/sdcard/。请使用Environment类上的适当方法来确定外部存储器上的目录。

我所说的图像查看器是指默认情况下使用intent.action_view打开的那个。关于多个文件,如果没有多个文件,幻灯片播放是如何工作的呢? - Luis A. Florit
@LuisA.Florit:“我所说的图像查看器是指默认情况下使用intent.action_view打开的那个” - 这种类型有数百种。“如果不使用多个文件,幻灯片演示如何工作?” - 图像查看器可能具有“幻灯片演示”功能,也可能没有 - 它们肯定不是必需的。据我所知,它们不会通过标准的Intent操作字符串公开“幻灯片演示”功能供第三方应用程序使用。 - CommonsWare
根据定义,“默认”的意思是只有一个(当然每个设置/设备都可能不同,但这没关系)。这就是为什么您不需要在我在原始帖子中提供的代码中指定查看器,它可以正常工作。无论如何,我知道的所有查看器都可以管理多个文件。应该有一种方法... - Luis A. Florit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接