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 

获取视频文件: 

Java代码  
  1. ContentResolver contentResolver = getContentResolver();  
  2.         String[] projection = new String[] { MediaStore.Video.Media.TITLE };  
  3.         Cursor cursor = contentResolver.query(  
  4.                 MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, null,  
  5.                 null, MediaStore.Video.Media.DEFAULT_SORT_ORDER);  
  6.         cursor.moveToFirst();  
  7.         int fileNum = cursor.getCount();  
  8.   
  9.         for (int counter = 0; counter < fileNum; counter++) {  
  10.             Log.w("tag""---file is:" +   
  11.                     cursor.getString(cursor  
  12.                     .getColumnIndex(MediaStore.Video.Media.TITLE)));  
  13.             cursor.moveToNext();  
  14.         }  
  15.         cursor.close();  


如果获取路径,需要讲projection修改为String[] projection = new String[]{MediaStore.Video.Media.DATA}; 

获取的语句也需要修改为:cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA)); 

获取音频文件: 

Java代码  
  1. Cursor cursor = getContentResolver().query(  
  2.                 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, nullnullnull,  
  3.                 MediaStore.Audio.Media.DEFAULT_SORT_ORDER);  
  4.         cursor.moveToFirst();  
  5.         int counter = cursor.getCount();  
  6.         String title = cursor.getString(cursor  
  7.                 .getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));  
  8.   
  9.         Log.w("tag""before looping,title=" + title);  
  10.         for (int j = 0; j < counter; j++) {  
  11.             Log.w("tag""title=" +   
  12.                     cursor.getString(cursor  
  13.                     .getColumnIndex(MediaStore.Audio.Media.TITLE)));  
  14.             cursor.moveToNext();  
  15.         }  
  16.         cursor.close();  



以下转自:http://blog.sina.com.cn/s/blog_5be1061c0100ctco.html 

首先给大家讲android的多媒体数据库。MediaStore这个类是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的所有信息,包括音频 

,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建,直接调用利用ContentResolver去掉用那些封装好的接口就可以进行数据库的操作了。今天我就介绍一些 

这些接口的用法。 

首先,要得到一个ContentResolver实例,ContentResolver可以这样获取,利用一个Activity或者Service的Context即可。如下所示: 

ContentResolver mResolver = ctx.getContentResolver(); 

上面的那个ctx的就是一个context,Activity.this就是那个Context,这个Context就相当于一个上下文环境。得到这个Context后就可以调用getContentResolver接口获取ContentResolver实例了。 

ContentResolver实例获得后,就可以进行各种查询,下面我就以音频数据库为例讲解增删改查的方法,视频和图像和音频非常类似。 

在讲解各种查询之前,我给大家介绍下怎么看android都提供了哪些多媒体表。在adb shell中,找到/data/data/com.android.providers.media/databases/下,然后找到SD卡的数据库文件(一般是 

一个.db文件),然后输入命令sqlite3加上这个数据库的名字就可以查询android的多媒体数据库了。.table命令可以列出所有多媒体数据库的表,.scheme加上表名可以查询表中的所有列名。这里可以利 

用SQL语句来查看你想要的数据,记得最后一定要记住每条语句后面都加上分号。下面开始讲述怎么在这些表上进行增删改查。 

查询,代码如下所示: 

Cursor cursor = resolver.query(_uri, prjs, selections, selectArgs, order); 

ContentResolver的query方法接受几个参数,参数意义如下: 

Uri:这个Uri代表要查询的数据库名称加上表的名称。这个Uri一般都直接从MediaStore里取得,例如我要取所有歌的信息,就必须利用MediaStore.Audio.Media. EXTERNAL _CONTENT_URI这个Uri。 

专辑信息要利用MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI这个Uri来查询,其他查询也都类似。 

Prjs:这个参数代表要从表中选择的列,用一个String数组来表示。 

Selections:相当于SQL语句中的where子句,就是代表你的查询条件。 

selectArgs:这个参数是说你的Selections里有?这个符号是,这里可以以实际值代替这个问号。如果Selections这个没有?的话,那么这个String数组可以为null。 

Order:说明查询结果按什么来排序。 

上面就是各个参数的意义,它返回的查询结果一个Cursor,这个Cursor就相当于数据库查询的中Result,用法和它差不多。 

------------------------------------------------------------------------------------------------------------------- 

增加,代码如下所以: 

Java代码  
  1. ContentValues values = new ContentValues();  
  2.   
  3. values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER,0);  
  4.   
  5. resolver.insert(_uri, values);  


这个insert传递的参数只有两个,一个是Uri(同查询那个Uri),另一个是ContentValues。这个ContentValuses对应于数据库的一行数据,只要用put方法把每个列的设置好之后,直接利用insert方 

法去插入就好了。 

更新,代码如下: 

Java代码  
  1. ContentResolver resolver = ctx.getContentResolver();  
  2.   
  3. Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;  
  4.   
  5. ContentValues values = new ContentValues();  
  6.   
  7. values.put(MediaStore.Audio.Media.DATE_MODIFIED, sid);  
  8.   
  9. resolver.update(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,values, where, selectionArgs);  


上面update方法和查询还有增加里的参数都很类似,这里就不再重复叙述了,大家也可直接参考google的文档,那里也写的很清楚。 

删除,代码如下: 

Java代码  
  1. ContentResolver resolver = ctx.getContentResolver();  
  2.   
  3. resolver.delete(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,where, selectionArgs);  


delete和更新的方法很类似,大家对照更新的方法看下马上就会明白,今天就写到这里了最近比较忙,打算一周发一篇心得体会吧,希望大家也把自己的开发心得写出来多多交流。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值