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都提供了哪些多媒体表。在adbshell中,找到/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,用法和它差不多。
  -------------------------------------------------------------------------------------------------------------------
  增加,代码如下所以:
  ContentValues values = new ContentValues();
  values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER,0);
  resolver.insert(_uri, values);
  这个insert传递的参数只有两个,一个是Uri(同查询那个Uri),另一个是ContentValues。这个ContentValuses对应于数据库的一行数据,只要用put方法把每个列的设置好之后,直接利用insert方法去插入就好了。
  更新,代码如下:
  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);
  上面update方法和查询还有增加里的参数都很类似,这里就不再重复叙述了,大家也可直接参考google的文档,那里也写的很清楚。
  删除,代码如下:
  ContentResolver resolver = ctx.getContentResolver();
  nbsp;resolver.delete(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,where,selectionArgs);
  delete和更新的方法很类似,大家对照更新的方法看下马上就会明白
当保存一张新图片,视频,录音后,数据库并没有添加相应的数据,所以通过查询数据库也查不到相关多媒体信息,而此时又不能重启机器或者把sd卡拔掉再插上,只能通过发送通知来同步数据库,方法如下: IntentFilter intentFilter = newIntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED); intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED); intentFilter.addDataScheme("file"); BroadcastReceiver scanReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context,Intent intent) { String action =intent.getAction(); if(Intent.ACTION_MEDIA_SCANNER_STARTED.equals(action)) { //当系统开始扫描sd卡时 Log.i("lijinzhe", "ACTION_MEDIA_SCANNER_STARTED"); } elseif (Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action)) { //当系统扫描完毕时 Log.i("lijinzhe", "ACTION_MEDIA_SCANNER_FINISHED"); } } }; registerReceiver(scanReceiver, intentFilter); sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"+Environment.getExternalStorageDirect ory())));
分享: 分享到新浪Qing

0

阅读 (121) 评论 (0) 收藏 (0) 禁止转载 喜欢 打印 举报
已投稿到: 排行榜 圈子
前一篇: 使用MediaStore.Images和Cursor查询本地图片和图片缩略图 后一篇: android自定义照相机Camera黑屏

更多相关文章

  1. android 的短信数据库的读取
  2. Android(安卓)SQLiteOpenHelper Sqlite数据库的创建与打开
  3. 查看Sqlite 数据库
  4. Android(安卓)NoSQL之SnappyDB
  5. 浅谈Android(安卓)动画,带你进入动画的世界
  6. Android平台上sqllite 简介
  7. 使用android快速开发框架afinal的FinalDb操作android sqlite数据
  8. mybatisplus的坑 insert标签insert into select无参数问题的解决
  9. Python技巧匿名函数、回调函数和高阶函数

随机推荐

  1. Android(安卓)事件处理
  2. Android(安卓)AsyncTask解析
  3. android日志分析与记录.
  4. 理解Android的菜单
  5. Android高手进阶教程(四)之----Android(
  6. .net程序员转战android第二篇---牛刀小试
  7. Android(安卓)NFS文件系统挂载遇到的问题
  8. Android应用程序启动过程源代码分析(1)
  9. android读取keystore证书文件
  10. 分析脚本文件AndroidInitProcess分析心得