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
Author by
Sujith S Manjavana
I got a lot of help from StackOverflow. Just trying to payback.. :-)
Updated on July 08, 2021Comments
-
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.