android获取手机上的图片和视频缩略图thumbnails
转贴自:http://www.android123.com.cn/androidkaifa/665.html
【0】大家都知道Android从1.5开始刚插入SD卡时系统会调用MediaScanner服务进行后台扫描,索引新的歌曲、图片和视频等信息,如果我们需要快速提取图片和视频缩略图可以直接访问 android.provider.MediaStore.Images.Thumbnails 和android.provider.MediaStore.Video.Thumbnails这两个数据库,即可查询出来缩略图
如何判断文件呢? 可以通过Cursor遍历数据库,对比INTERNAL_CONTENT_URI字段的值,这是一个Uri我们可以转成String,这里保存着Android手机SD卡上的多媒体文件完整路径,
有关具体的缩略图可以通过getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Options options) 或getThumbnail(ContentResolver cr, long origId, long groupId, int kind, BitmapFactory.Options options) 方法获取,这两种方法返回Bitmap类型,而缩略图的分辨率可以从HEIGHT和WIDTH两个字段提取,在Android上缩略图分为两种,通过读取KIND字段来获得,分别为MICRO_KIND和MINI_KIND 分别为微型和迷你两种缩略模式,前者的分辨率更低。这样我们平时获取文件系统的某个图片预览时,可以直接调用系统缩略图,而不用自己重新计算。
最后Android123提示大家,缩略图保存在SD卡的DCIM目录,里面的.thumbnails是图片的,而.video_thumbnails是视频的,这两个文件夹为隐藏属性,一般的文件管理器都可以看到。
【1】从Android2.2开始系统新增了一个缩略图ThumbnailUtils类,位于framework的android.media.ThumbnailUtils位置,可以帮助我们从mediaprovider中获取系统中的视频或图片文件的缩略图,该类提供了三种静态方法可以直接调用获取。
1. static Bitmap createVideoThumbnail(String filePath, int kind) //获取视频文件的缩略图,第一个参数为视频文件的位置,比如/sdcard/android123.3gp,而第二个参数可以为MINI_KIND或MICRO_KIND最终和分辨率有关
2. static Bitmap extractThumbnail(Bitmap source, int width, int height, int options) //直接对Bitmap进行缩略操作,最后一个参数定义为OPTIONS_RECYCLE_INPUT,来回收资源
3. static Bitmap extractThumbnail(Bitmap source, int width, int height) // 这个和上面的方法一样,无options选项
最后Android开发网再次提醒大家,ThumbnailUtils类是API Level从8或更高才开始支持的。
以下转自:http://blog.csdn.net/jing_huanhuan/article/details/6136075
获取视频文件:
ContentResolver contentResolver = getContentResolver();String[] projection = new String[] { MediaStore.Video.Media.TITLE };Cursor cursor = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, null,null, MediaStore.Video.Media.DEFAULT_SORT_ORDER);cursor.moveToFirst();int fileNum = cursor.getCount();for (int counter = 0; counter < fileNum; counter++) {Log.w("tag", "---file is:" + cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.TITLE)));cursor.moveToNext();}cursor.close();
Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);cursor.moveToFirst();int counter = cursor.getCount();String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));Log.w("tag", "before looping,title=" + title);for (int j = 0; j < counter; j++) {Log.w("tag", "title=" + cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));cursor.moveToNext();}cursor.close();
ContentValues values = new ContentValues();values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER,0);resolver.insert(_uri, values);
ContentResolver resolver = ctx.getContentResolver();Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;ContentValues values = new ContentValues();values.put(MediaStore.Audio.Media.DATE_MODIFIED, sid);resolver.update(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,values, where, selectionArgs);
ContentResolver resolver = ctx.getContentResolver();resolver.delete(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,where, selectionArgs);