2013-10-04 5 views
2

Я работаю над приложением для записи видео. Я хочу перечислить видео, которые я буду хранить в конкретной папке. В следующем коде я могу извлечь все видео с мобильных устройств .Но я должен перечислить видео с определенного кем folder.Can направлять меня please.Thanks в AdvanceКак перечислить все видео из определенной папки в android

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; 
     } 
    } 
} 
+0

Этот код имеет ошибки. Вы пытаетесь получить эскиз видео, используя его имя файла, а не его идентификатор MediaStore. – Anonymous

ответ

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"/> 
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); 
    } 
} 
+0

Это не работает для меня на Android 4.3. Он возвращает все миниатюры видео из внешнего контента вместо определенного «FolderPath», – Dante

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

выше код даст вам все файлы из папки, после вы можете отделить , используя его добавочному

 Смежные вопросы

  • Нет связанных вопросов^_^