【问题标题】:Java and Android: How to open several files with an Intent?Java 和 Android:如何使用 Intent 打开多个文件?
【发布时间】:2012-06-26 16:39:01
【问题描述】:

我确定这是一个微不足道的问题,但我没有找到答案。

我正在制作一个想要打开图像查看器的 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.

【问题讨论】:

    标签: java android android-intent


    【解决方案1】:

    我要打开图片查看器

    Android 中没有“图像查看器”。设备和用户可能有许多不同的应用程序能够查看从本地文件加载的image/jpeg 文件。

    但是如何将多张图像传递给查看器?

    抱歉,没有标准的Intent 可以打开任何类型的多个文件。

    另外,请不要在您的应用中硬编码/mnt/sdcard/。请在Environment 类上使用正确的方法来确定外部存储上的目录。

    【讨论】:

    • 图片查看器是指默认使用intent.action_view 打开的查看器。关于多个文件,如果不是多个文件,幻灯片如何工作?
    • @LuisA.Florit:“我所说的图像查看器是指默认使用intent.action_view 打开的那个”——其中有数百个。 “如果没有多个文件,幻灯片如何工作?” ——图像查看器可能有也可能没有“幻灯片”功能——当然不是必须的。 AFAIK,他们不会通过标准 Intent 操作字符串公开“幻灯片”功能以供第三方应用使用。
    • 根据定义,“默认的”意味着只有一个(当然每个设置/设备会有所不同,但这没关系)。这就是为什么您不需要使用我在原始帖子中提供的代码指定查看器的原因。无论如何,我认识的所有查看器都管理多个文件。应该有办法……
    【解决方案2】:

    您需要在一个数组中列出您想要查看的所有文件。然后显示其中一个数组,并在拖动时显示下一个图像。

    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 不存在,我知道...)
    • 您给出的示例是一次仅显示一张图像。我给出的示例代码,它读取一个文件夹并选择它需要显示的所有(图像)文件。在您的程序中,您需要读取数组列表(命名列表)并获取路径+文件名以显示它们。当您拖动您的 android 设备时,需要读取下一张照片。我通常在处理中编写我的代码,所以我无法提供正确的工作代码。
    • 您的代码将是:Intent intent = new Intent();意图.setAction(android.content.Intent.ACTION_VIEW);文件 file1 = 新文件(list[0]+list[1]); intent.setDataAndType(Uri.fromFile(file1), "image/jpg");开始活动(意图);当需要显示下一张图片时,需要在list[0]和list[1]中添加4。
    • 是的,我理解了你的代码。我不明白的是缺少什么,“意图......”部分。您构建了一个文件列表,但是如何在查看器中显示它们?显示文件列表或播放一组歌曲的命令是什么? (我的真实代码已经给出了文件列表,所以这不是问题)。
    • 那么,您的意思是每次拖动时都重复使用我的原始代码吗? (我看不出你和我的区别)。这不会打开查看器的新实例吗?抱歉,正如您所意识到的,这是我的第一个 android 代码... :)
    【解决方案3】:

    不要使用硬编码路径。

    改变这一行:

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

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

    它将定位到

    /storage/emulated/0/Picture
    

    如果你想要你的sdcard的父目录,你可以删除Environment.DIRECTORY_PICTURES

    由于您指定了单个文件 20397a.jpg,这就是您无法看到其他图像的原因。

    如果您想查看图片以外的其他内容,请将“image/jpg”更改为“image/*

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      相关资源
      最近更新 更多