How to get list of video files in a specific folder in android?

25,123

Solution 1

you can use this code for get videos from specific folder as:

  String selection=MediaStore.Video.Media.DATA +" like?";
            String[] selectionArgs=new String[]{"%FolderName%"};
            videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                    parameters, selection, selectionArgs, MediaStore.Video.Media.DATE_TAKEN + " DESC");

Its works for me like a charm.

Solution 2

private List<String> path_vid;
public void searchVid(File dir) {
    String pattern = ".mp4";
            //Get the listfile of that flder
    final File listFile[] = dir.listFiles();

    if (listFile != null) {
        for (int i = 0; i < listFile.length; i++) {
            final int x = i;
            if (listFile[i].isDirectory()) {
                walkdir(listFile[i]);
            } else {
                if (listFile[i].getName().endsWith(pattern)) {
                    // Do what ever u want, add the path of the video to the list
                       path_vid.add(listFile[i]);
                }
            }
        }
    }
}

This function is recursive, and search vids setting it into a list, the vids are searched from an especified folder, if u want to search vids into the sdCard, use:

File sdCard = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
//For example:
//File vidsFolder= new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Videos");
searchVid(sdCard);
if(path_vid.size()>0){
   //Convert list into array
   String[] array = path_vid.toArray(new String[path_vid.size()]);
   //Create Adapter
   ArrayAdapter<String> adapter =new ArrayAdapter<String>(this,android.R.layout.simple_list_item, array);
   //Set adapter to videlist
   videolist.setAdapter(adapter);
}else{
   //No vids found
   exit();
}

Solution 3

If you know the specific folder, use:

.getExternalFilesDir
Share:
25,123
Sujith S Manjavana
Author by

Sujith S Manjavana

I got a lot of help from StackOverflow. Just trying to payback.. :-)

Updated on July 08, 2021

Comments

  • Sujith S Manjavana
    Sujith S Manjavana almost 3 years

    How to get list of video files stored in a specific folder using mediastore? currently i'm using this code

    package com.example.videolisttest;
    
    import android.app.Activity;
    import android.content.Context;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        private Cursor videocursor;
        private int video_column_index;
        ListView videolist;
        int count;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            init_phone_video_grid();
        }
    
        private void init_phone_video_grid() {
            System.gc();
            String[] proj = { MediaStore.Video.Media._ID,
                    MediaStore.Video.Media.DATA,
                    MediaStore.Video.Media.DISPLAY_NAME,
                    MediaStore.Video.Media.SIZE };
            videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                    proj, null, null, null);
            count = videocursor.getCount();
            videolist = (ListView) findViewById(R.id.PhoneVideoList);
            videolist.setAdapter(new VideoAdapter(getApplicationContext()));
            videolist.setOnItemClickListener(videogridlistener);
        }
    
        private OnItemClickListener videogridlistener = new OnItemClickListener() {
            public void onItemClick(AdapterView parent, View v, int position,
                    long id) {
                System.gc();
                video_column_index = videocursor
                        .getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
                videocursor.moveToPosition(position);
                String filename = videocursor.getString(video_column_index); 
                /*   Intent intent = new Intent(MainActivity.this, ViewVideo.class);
                      intent.putExtra("videofilename", filename);
                      startActivity(intent);*/
                Toast.makeText(getApplicationContext(), filename, Toast.LENGTH_SHORT).show();
            }
        };
    
        public class VideoAdapter extends BaseAdapter {
            private Context vContext;
    
            public VideoAdapter(Context c) {
                vContext = c;
            }
    
            public int getCount() {
                return count;
            }
    
            public Object getItem(int position) {
                return position;
            }
    
            public long getItemId(int position) {
                return position;
            }
    
            public View getView(int position, View convertView, ViewGroup parent) {
                System.gc();
                TextView tv = new TextView(vContext.getApplicationContext());
                String id = null;
                if (convertView == null) {
                    video_column_index = videocursor
                            .getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
                    videocursor.moveToPosition(position);
                    id = videocursor.getString(video_column_index);
                    video_column_index = videocursor
                            .getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);
                    videocursor.moveToPosition(position);
                    id += " Size(KB):" + videocursor.getString(video_column_index);
                    tv.setText(id);
                } else
                    tv = (TextView) convertView;
                return tv;
            }
        }
    }    
    

    But this method scans the whole sdcard. i want to scan a specific folder. i don't want to use the filefilter method. please share any method using mediastore.