和Image,Audio一样,在Android中,Video信息也被MediaStore管理着。

 

和每个视频对应的有其一个缩略图,这个缩略图往往是其第一帧的图像。

 

下面看代码:

  1. package demo.camera;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import android.app.ListActivity;  
  5. import android.content.Context;  
  6. import android.database.Cursor;  
  7. import android.net.Uri;  
  8. import android.os.Bundle;  
  9. import android.provider.MediaStore;  
  10. import android.view.LayoutInflater;  
  11. import android.view.View;  
  12. import android.view.ViewGroup;  
  13. import android.widget.BaseAdapter;  
  14. import android.widget.ImageView;  
  15. import android.widget.TextView;  
  16. /**  
  17.  * 本实例,我们将通过检索SDCard上的Video信息  
  18.  * 在MediaStore中,MediaStore.Video.Media中就有Video相关信息,  
  19.  * 同时MediaStore.Video.Thumbnails中含有各个video对应的缩略图信息  
  20.  *   
  21.  * @author Administrator  
  22.  *  
  23.  */ 
  24. public class AdvancedVideoDemo extends ListActivity {  
  25.       
  26.     private Cursor cursor;  
  27.       
  28.     public void onCreate(Bundle savedInstanceState){  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.video_advanced);  
  31.           
  32.         init();  
  33.     }  
  34.       
  35.       
  36.     private void init(){  
  37.         String[] thumbColumns = new String[]{  
  38.                 MediaStore.Video.Thumbnails.DATA,  
  39.                 MediaStore.Video.Thumbnails.VIDEO_ID  
  40.         };  
  41.           
  42.         String[] mediaColumns = new String[]{  
  43.                 MediaStore.Video.Media.DATA,  
  44.                 MediaStore.Video.Media._ID,  
  45.                 MediaStore.Video.Media.TITLE,  
  46.                 MediaStore.Video.Media.MIME_TYPE  
  47.         };  
  48.           
  49.         //首先检索SDcard上所有的video  
  50.         cursor = this.managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, mediaColumns, nullnullnull);  
  51.           
  52.         ArrayList<VideoInfo> videoList = new ArrayList<AdvancedVideoDemo.VideoInfo>();  
  53.           
  54.         if(cursor.moveToFirst()){  
  55.             do{  
  56.                 VideoInfo info = new VideoInfo();  
  57.                   
  58.                 info.filePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));  
  59.                 info.mimeType = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE));  
  60.                 info.title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));  
  61.                   
  62.                 //获取当前Video对应的Id,然后根据该ID获取其Thumb  
  63.                 int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));  
  64.                 String selection = MediaStore.Video.Thumbnails.VIDEO_ID +"=?";  
  65.                 String[] selectionArgs = new String[]{  
  66.                         id+"" 
  67.                 };  
  68.                 Cursor thumbCursor = this.managedQuery(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, thumbColumns, selection, selectionArgs, null);  
  69.                   
  70.                 if(thumbCursor.moveToFirst()){  
  71.                     info.thumbPath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Thumbnails.DATA));  
  72.                       
  73.                 }  
  74.                   
  75.                 //然后将其加入到videoList  
  76.                 videoList.add(info);  
  77.                   
  78.             }while(cursor.moveToNext());  
  79.         }  
  80.           
  81.         //然后需要设置ListView的Adapter了,使用我们自定义的Adatper  
  82.         VideoAdapter adapter = new VideoAdapter(this, videoList);  
  83.         this.getListView().setAdapter(adapter);  
  84.     }  
  85.       
  86.     static class VideoInfo{  
  87.         String filePath;  
  88.         String mimeType;  
  89.         String thumbPath;  
  90.         String title;  
  91.     }  
  92.       
  93.     /**  
  94.      * 定义一个Adapter来显示缩略图和视频title信息  
  95.      * @author Administrator  
  96.      *  
  97.      */ 
  98.     static class VideoAdapter extends BaseAdapter{  
  99.           
  100.         private Context context;  
  101.         private List<VideoInfo> videoItems;  
  102.           
  103.         public VideoAdapter(Context context, List<VideoInfo> data){  
  104.             this.context = context;  
  105.             this.videoItems = data;  
  106.         }  
  107.         @Override 
  108.         public int getCount() {  
  109.             // TODO Auto-generated method stub  
  110.             return videoItems.size();  
  111.         }  
  112.         @Override 
  113.         public Object getItem(int p) {  
  114.             // TODO Auto-generated method stub  
  115.             return videoItems.get(p);  
  116.         }  
  117.         @Override 
  118.         public long getItemId(int p) {  
  119.             // TODO Auto-generated method stub  
  120.             return p;  
  121.         }  
  122.         @Override 
  123.         public View getView(int position, View convertView, ViewGroup parent) {  
  124.             ViewHolder holder = null;  
  125.             if(convertView == null){  
  126.                 holder = new ViewHolder();  
  127.                 convertView = LayoutInflater.from(context).inflate(R.layout.video_item, null);  
  128.                 holder.thumbImage = (ImageView)convertView.findViewById(R.id.thumb_p_w_picpath);  
  129.                 holder.titleText = (TextView)convertView.findViewById(R.id.video_title);  
  130.                 convertView.setTag(holder);  
  131.             }else{  
  132.                 holder = (ViewHolder)convertView.getTag();  
  133.             }  
  134.               
  135.             //显示信息  
  136.             holder.titleText.setText(videoItems.get(position).title);  
  137.             if(videoItems.get(position).thumbPath != null){  
  138.                 holder.thumbImage.setImageURI(Uri.parse(videoItems.get(position).thumbPath));  
  139.             }  
  140.               
  141.             return convertView;  
  142.         }  
  143.           
  144.         class ViewHolder{  
  145.             ImageView thumbImage;  
  146.             TextView titleText;  
  147.         }  
  148.           
  149.     }  
  150. }