10.1 使用MediaStore检索视频
正如在第1章多讨论的,Android为应用程序之间共享数据提供了一个标准的方式。ContentProvider类是实现此功能的基础类。而且,正如之前所提及的那样,针对媒体扩展了ContentProvider概念的类是各种MediaStore类。我们之前已经查看了如何将MediaStore用于图像和音频以及他们的相关元数据。而用于视频的MediaStore也会以大致相同的方式工作。
MediaStore.Video是MediaStore中的嵌套类,专门用于视频文件。在MediaStore.Video中是MediaStore.Video.Media类,其中包含了各种常量,以指定在MediaStore中与视频媒体本身相关的可用列,其中的许多列都是继承自其他类,如MediaStore.MediaColumns等。还有一个MediaStore.Video.Thumbnails类,其中也包含了常量,以指定在用于缩略图存储的MediaStore中与视频文件相关的可用列。
为了使用在Activity类中存在的managedQuery方法,还需要传入想要返回的列数组。本例指定的数组表明我们想要视频在MediaStore中的唯一ID:MediaStore.Video.Media._ID。随后是MediaStore.Video.Media.DATA,它是指向视频文件本身的路径。接下来两个参数指定我们想要获得文件的标题和MIME类型。
1 String[]mediaColumns={MediaStore.Video.Media._ID,MediaStore.Video.Media.DATA,MediaStore.Video.Media.TITLE,MediaStore.Video.Media.MIME_TYPE};
为了通过MediaStore查询视频内容,可利用在常量MediaStore.Video.Media.EXTERNAL_CONTENT_URI中指定的Uri作为查询的数据源。
1 cursor=managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, mediaColumns, null, null, null);
之后将返回一个Cursor对象,其可用于遍历和提取数据。
1 if(cursor.moveToFirst()){ 2 do{ 3 VideoViewInfo newVVI=new VideoViewInfo(); 4 int id=cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media._ID)); 5 Cursor thumbCursor=managedQuery(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, thumbColumn, MediaStore.Video.Thumbnails.VIDEO_ID+"="+id, null, null); 6 if(thumbCursor.moveToFirst()){ 7 newVVI.thumbPath=thumbCursor.getString(thumbCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA)); 8 } 9 newVVI.filePath=cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA)); 10 newVVI.title=cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.TITLE)); 11 newVVI.mimeType=cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.MIME_TYPE)); 12 videoRows.add(newVVI); 13 }while(cursor.moveToNext()); 14 }
posted on 2014-09-04 11:00 宁静致远,一览众山小 阅读(1867) 评论(0) 编辑 收藏 举报