Android 多媒体之MediaStore

概述

MediaStoreandroid系统提供的一个多媒体数据库,专门用于存放多媒体信息的,通过ContentResolver即可对数据库进行操作。如下是其结构:

MediaStore

结构图解:

MediaStore.Files: 共享的文件,包括多媒体和非多媒体信息
MediaStore.Audio: 存放音频信息
MediaStore.Image: 存放图片信息
MediaStore.Vedio: 存放视频信息

每个内部类中都又包含了Media,Thumbnails和相应的MediaColumns,分别提供了媒体信息,缩略信息和 操作字段。

使用

都是通过 ContentResolverCursor 来操作的,比如查询图片:

//获取cursor
Cursor cursor = this.getContentResolver().query(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, // URI,可以有多种形式
    null, 
    null, 
    null, 
    null);
//图片路径所在列的索引
int indexPhotoPath = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
while (cursor.moveToNext()) {
    //打印图片的路径
    Log.i("uri:", cursor.getString(indexPhotoPath));
}
cursor.close();

参数解析:

public final Cursor query(
Uri uri,                //数据资源路径
String[] projection,    //查询的列
String selection,       //查询的条件
String[] selectionArgs, //条件填充值
String sortOrder){}     //排序依据

数据库字段

MediaStore 提供了所有数据库中的字段 宏定义,操作起来十分方便。

比如:

INTERNAL_CONTENT_URI; //内部库URI
EXTERNAL_CONTENT_URI;//外部库URI
CONTENT_TYPE;//内容提供者类型
DEFAULT_SORT_ORDER;//排序方式

有些URI系统并没有提供,但是提供了相关方法,比如,操作文件的URI写法

MediaStore.Files.getContentUri("external");
Uri.parse("content://media/external/files");//和上面的写法等价

更多用法参考: 关于MediaStore.Files
android 多媒体数据库详解

结合LoaderManager

一般,我们都是实现 LoaderManager.LoaderCallbacks<Cursor>接口,

public Loader<Cursor> onCreateLoader(int id, Bundle args) {}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {}
public void onLoaderReset(Loader<Cursor> loader) {}

通过 参数 Cursor data来遍历 获取相关信息,更多用法参考:Android获取MediaStore的所有照片

Android加载器LoaderManager.loaderCallbacks

扩展阅读

更多关于 MediaStore 的源码分析,参考系列文章:

Android-源码分析之MediaScanner[1]

简化MediaStore操作的第三方库:

MediaFacade

发布了145 篇原创文章 · 获赞 88 · 访问量 32万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览