Android 媒体库图片,音频,视频,文件的查询

转载:Android 媒体库图片,音频,视频,文件的查询

首先,我们该怎样获取查询这些信息?

  其实android中其实系统已经给我们提供了一个数据库,里面包含了sd卡中所有文件的信息(大小、位置、创建时间等)。
  
  多媒体数据库存放的位置:  
- data/data/com.android.provider.media/databases/external.db
- data/data/com.android.provider.media/databases/internal.db

  但是直接访问db数据库文件无疑是不现实的,这时候我们可以考虑使用 Android MediaProvider(媒体内容提供者),通过它我们可以很方便的获取到我们想要的信息。

  Android MediaProvider 使用 SQLite 数据库存储图片、视频、音频等多媒体文件的信息,供视频播放器、音乐播放器、图库使用。Media数据库分为internal 和external ,对应的是内部存储和外部存储数据库,这里指的就是上面两个db数据库文件。


ContentResolver(内容解析者)

  内容提供者(即 MediaProvider)已经有了,我们还需要一个内容解析者ContenResolver来帮助我们更好地解析数据。

  1. 获取ContentResolver : mContext.getContentResolver();

  2. ContentResolver的两个重要方法
    query (...) 搜索指定Uri下的媒体文件,后面是sql语句
    insert(...) 把新文件插入到指定Uri表中,后面跟数据库键值对。

  3. query方法参数介绍

    • uri:用于检索内容的 URI
    • projection:要返回的列的列表。传递 null 时,将返回所有列,这样会导致效率低下
    • selection:一种用于声明要返回哪些行的过滤器,其格式为 SQL WHERE 子句(WHERE 本身除外)。
    • selectionArgs:在 selection 中包含 ?s,它将按照在 selection 中显示的顺序替换为 selectionArgs 中的值。
    • sortOrder:行的排序依据,其格式为 SQL ORDER BY 子句(ORDER BY 自身除外)。
  4. 媒体文件的Uri是如何获取的
      找到MediaStore,里面内部类有Images,Audio,Video,Files这几个包含了所有Android媒体类型,例如我们要查询图片则通过Images 得到对应的EXTERNAL_CONTENT_URI就能按照ContentResolver 的方法查询图片,同时Images 中还有缩略图类,可以通过查询到图片的缩略图,表的字段名都一样,关键也是Uri,可以通过Images中的Thumbnails获取。以此类推可以去看看其他几种媒体类型中的相关Uri以及字段名和能查询到的信息。

  5. 关于MediaStore.Files


猜你喜欢

转载自blog.csdn.net/qq_21700489/article/details/78739918