简体   繁体   中英

Java and Android: How to open several files with an Intent?

I'm sure this is a trivial question, but I failed to find an answer.

I'm making an Android app from which I want to open the image viewer showing several images. I know how to do this with only one image:

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

This works perfectly. But how do I pass several images to the viewer?

Thanks!! L.

I want to open the image viewer

There is no "the image viewer" in Android. Devices and users may have many, many different apps that are capable of viewing image/jpeg files loaded from a local file.

But how do I pass several images to the viewer?

Sorry, but there is no standard Intent to open multiple files of any sort.

Also, please do not hardcode /mnt/sdcard/ in your app. Please use the proper methods on the Environment class to determine directories on external storage.

You need to list all files you want to view in a array. Then you display one of the array and when you drag, you show the next image.

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();
      }
    }
  }

Now you can read the array and display then one by one.

Do not use Hard Coded Paths.

Change this line :

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

to

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

It will locate to

/storage/emulated/0/Picture

You can remove Environment.DIRECTORY_PICTURES If you want the parent directory of your sdcard.

Since you are specifying a single file 20397a.jpg that's why you are unable to see other images.

And if you want to see other contents other than images then change ' image/jpg ' to ' image/* '

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM