检索MediaStore中的Video和其对应的缩略图信息

来源:互联网 发布:linux设置pst时区 编辑:程序博客网 时间:2024/05/17 04:47

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

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

下面看代码:

 


view plaincopy to clipboardprint?
01.package demo.camera; 
02.import java.util.ArrayList; 
03.import java.util.List; 
04.import android.app.ListActivity; 
05.import android.content.Context; 
06.import android.database.Cursor; 
07.import android.net.Uri; 
08.import android.os.Bundle; 
09.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, null, null, null); 
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_image); 
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.} 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chenjie19891104/archive/2011/04/21/6338910.aspx