如何列出android中特定文件夹中的所有视频

时间:2013-10-04 10:00:44

标签: android cursor android-videoview video-recording galleryview

我正在制作视频录制应用程序。我想列出我将存储在特定文件夹中的视频。通过以下代码,我可以从移动设备中获取所有视频。但我需要列出特定视频文件夹。任何人都可以指导我。谢谢你提前

public class VideoListActivity 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_video_list);
        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.listView1);
        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(VideoListActivity.this, Viewvideo.class);
            intent.putExtra("videofilename", filename);

            startActivity(intent);
        }
    };

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


                        ImageView iv = new ImageView(vContext);
                        ContentResolver crThumb = getContentResolver();
                        BitmapFactory.Options options=new BitmapFactory.Options();
                        options.inSampleSize = 1;
                        Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(crThumb, position, MediaStore.Video.Thumbnails.MICRO_KIND, options);
                        iv.setImageBitmap(curThumb);

                tv.setText(id);

            } else
                tv = (TextView) convertView;
            return tv;
        }
    }
}

4 个答案:

答案 0 :(得分:1)

使用此代码:

package com.vt.soc;

    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.net.Uri;
    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.GridView;
    import android.widget.ImageView;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;


    public class MainActivity extends Activity {
        //set constants for MediaStore to query, and show videos
        private final static Uri MEDIA_EXTERNAL_CONTENT_URI = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        private final static String _ID = MediaStore.Video.Media._ID;
        private final static String MEDIA_DATA = MediaStore.Video.Media.DATA;
        //flag for which one is used for images selection
        private GridView _gallery; 
        private Cursor _cursor;
        private int _columnIndex;
        private int[] _videosId;
        private Uri _contentUri;
        String filename;
        int flag = 0;



        protected Context _context;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            _context = getApplicationContext();
            setContentView(R.layout.activity_main);
            //set GridView for gallery
            _gallery = (GridView) findViewById(R.id.videoGrdVw);
            //set default as external/sdcard uri
            _contentUri = MEDIA_EXTERNAL_CONTENT_URI;

            initVideosId();

            //set gallery adapter
            setGalleryAdapter();


        }
        private void setGalleryAdapter() {
            _gallery.setAdapter(new VideoGalleryAdapter(_context));
            _gallery.setOnItemClickListener(_itemClickLis);
            flag = 1;       
        }
        private AdapterView.OnItemClickListener _itemClickLis = new OnItemClickListener() 
        {
            @SuppressWarnings({ "deprecation", "unused", "rawtypes" })
            public void onItemClick(AdapterView parent, View v, int position, long id) 
            {
                // Now we want to actually get the data location of the file
                String [] proj={MEDIA_DATA};
                // We request our cursor again
                _cursor = managedQuery(_contentUri,
                        proj, // Which columns to return
                        MEDIA_DATA + " like ? ",       // WHERE clause; which rows to return (all rows)
                        new String[] {"%Movies%"},       // WHERE clause selection arguments (none)
                        null); // Order-by clause (ascending by name)
                // We want to get the column index for the data uri
                int count = _cursor.getCount();
                //
                _cursor.moveToFirst();
                //
                _columnIndex = _cursor.getColumnIndex(MEDIA_DATA);
                // Lets move to the selected item in the cursor
                _cursor.moveToPosition(position);
                // And here we get the filename
                filename = _cursor.getString(_columnIndex);
                //*********** You can do anything when you know the file path :-)
                showToast(filename);

                Intent i = new Intent(MainActivity.this, Player.class); 
                i.putExtra("videoPath", filename);
                startActivity(i);


                //
            }
        };
        @SuppressWarnings("deprecation")
        private void initVideosId() {
            try
            {
                //Here we set up a string array of the thumbnail ID column we want to get back
                String [] proj={_ID};
                // Now we create the cursor pointing to the external thumbnail store
                _cursor = managedQuery(_contentUri,
                        proj, // Which columns to return
                        MEDIA_DATA + " like ? ",       // WHERE clause; which rows to return (all rows)
                        new String[] {"%Movies%"},       // WHERE clause selection arguments (none)
                        null); // Order-by clause (ascending by name)
                int count= _cursor.getCount();
                // We now get the column index of the thumbnail id
                _columnIndex = _cursor.getColumnIndex(_ID);
                //initialize 
                _videosId = new int[count];
                //move position to first element
                _cursor.moveToFirst();          
                for(int i=0;i<count;i++)
                {           
                    int id = _cursor.getInt(_columnIndex);
                    //
                    _videosId[i]= id;
                    //
                    _cursor.moveToNext();
                    //
                }
            }catch(Exception ex)
            {
                showToast(ex.getMessage().toString());          
            }

        }
        protected void showToast(String msg)
        {
            Toast.makeText(_context, msg, Toast.LENGTH_LONG).show();
        }

        //
        private class VideoGalleryAdapter extends BaseAdapter
        {
            public VideoGalleryAdapter(Context c) 
            {
                _context = c;
            }
            public int getCount() 
            {
                return _videosId.length;
            }
            public Object getItem(int position) 
            {
                return position;
            }
            public long getItemId(int position) 
            {
                return position;
            }
            public View getView(int position, View convertView, ViewGroup parent) 
            {
                ImageView imgVw= new ImageView(_context);;
                try
                {
                    if(convertView!=null)
                    {
                        imgVw= (ImageView) convertView;
                    }
                    imgVw.setImageBitmap(getImage(_videosId[position]));
                    imgVw.setLayoutParams(new GridView.LayoutParams(200, 200));
                    imgVw.setPadding(8, 8, 8, 8);
                }
                catch(Exception ex)
                {
                    System.out.println("MainActivity:getView()-135: ex " + ex.getClass() +", "+ ex.getMessage());
                }
                return imgVw;
            }

            // Create the thumbnail on the fly
            private Bitmap getImage(int id) {
                Bitmap thumb = MediaStore.Video.Thumbnails.getThumbnail(
                        getContentResolver(),
                        id, MediaStore.Video.Thumbnails.MICRO_KIND, null);
                return thumb;
            }

        }


    }

并添加清单文件的权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

答案 1 :(得分:0)

有点晚,但为未来的观众发帖

Uri uri= MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String condition=MediaStore.Video.Media.DATA +" like?";
String[] selectionArguments=new String[]{"%FolderPath%"};
String sortOrder = MediaStore.Video.Media.DATE_TAKEN + " DESC";
String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.BUCKET_ID,
                MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri,projection, condition, selectionArguments, sortOrder);


int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
int pathColumn=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

if(cursor!=null){
    ContentResolver resolver = getApplicationContext().getContentResolver();
    while(cursor3.moveToNext()){
        String filePath=cursor.getString(pathColumn);
        int id = cursor.getInt(idColumn );
        Bitmap thumbNail = bitmap=MediaStore.Video.Thumbnails.getThumbnail(resolver, imageID, 
                                  MediaStore.Video.Thumbnails.MICRO_KIND, null);
    }
}

答案 2 :(得分:0)

use this code`  
String path = Environment.getExternalStorageDirectory().toString()+"/Your Folder/";`
 File f = new File(path);
 File file[] = f.listFiles();
for (int i=0; i < file.length; i++)
        {
            Log.d("Files", "FileName:" + file[i].getName());
        }
  

上面的代码为您提供了文件夹中的所有文件,之后您可以分开   使用它的扩展名

答案 3 :(得分:0)

尝试以下代码:

public static ArrayList<File> getListFiles(File parentDir) {
    ArrayList<File> inFiles = new ArrayList<File>();
    File[] files;
    files = parentDir.listFiles();
    if (files != null) {
        for (File file : files) {
            if (file.getName().endsWith(".mp4") ||
                    file.getName().endsWith(".gif")) {
                if (!inFiles.contains(file)) inFiles.add(file);

                if (!inFiles.contains(file)) inFiles.add(file);
            }
        }
    }
    return inFiles;
}

使用:

private static final String WHATSAPP_STATUSES_LOCATION =  
"/storage/emulated/0/yourfoldername";


getListFiles(new File(WHATSAPP_STATUSES_LOCATION));