Pankaj Gadge
Pankaj Gadge

Reputation: 11

How to get all photos from Android device INTERNAL Storage

I am new to android programming . I am trying to fetch all photos (or Image's path) reside in android device Internal Storage. I have written the function like this--

public static ArrayList<String> getImagesPath(Activity activity) {
    Uri uri;
    ArrayList<String> listOfAllImages = new ArrayList<String>();
    Cursor cursor;
    int column_index_data;
    String PathOfImage = null;
    uri = android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI;

    String[] projection = {MediaStore.MediaColumns.DATA};

    cursor = activity.getContentResolver().query(uri, projection, null, null, null);

    column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
    while (cursor.moveToNext()) {
        PathOfImage = cursor.getString(column_index_data);
        listOfAllImages.add(PathOfImage);
    }
    return listOfAllImages;
}

Upvotes: 1

Views: 2572

Answers (2)

Julfikar
Julfikar

Reputation: 1423

Try this, hope it will work for you

public ArrayList<String> getFilePaths()
{


    Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    String[] projection = {MediaStore.Images.ImageColumns.DATA};
    Cursor c = null;
    SortedSet<String> dirList = new TreeSet<String>();
    ArrayList<String> resultIAV = new ArrayList<String>();

    String[] directories = null;
    if (u != null)
    {
        c = managedQuery(u, projection, null, null, null);
    }

    if ((c != null) && (c.moveToFirst()))
    {
        do
        {
            String tempDir = c.getString(0);
            tempDir = tempDir.substring(0, tempDir.lastIndexOf("/"));
            try{
                dirList.add(tempDir);
            }
            catch(Exception e)
            {

            }
        }
        while (c.moveToNext());
        directories = new String[dirList.size()];
        dirList.toArray(directories);

    }

    for(int i=0;i<dirList.size();i++)
    {
        File imageDir = new File(directories[i]);
        File[] imageList = imageDir.listFiles();
        if(imageList == null)
            continue;
        for (File imagePath : imageList) {
            try {

                if(imagePath.isDirectory())
                {
                    imageList = imagePath.listFiles();

                }
                if ( imagePath.getName().contains(".jpg")|| imagePath.getName().contains(".JPG")
                        || imagePath.getName().contains(".jpeg")|| imagePath.getName().contains(".JPEG")
                        || imagePath.getName().contains(".png") || imagePath.getName().contains(".PNG")
                        )
                {



                    String path= imagePath.getAbsolutePath();
                    resultIAV.add(path);

                }
            }
            //  }
            catch (Exception e) {
                e.printStackTrace();
                FirebaseCrash.report(e);
            }
        }
    }

    return resultIAV;

}

You can add any extension to get the files

Upvotes: 1

Ellie Zou
Ellie Zou

Reputation: 2041

It returns null, because cursor == null or cursor.getCount() == 0. Which means you don't have photos in your internal storage.

PS: Cursor should be freed after use.

Upvotes: 0

Related Questions