概述
MediaStore
是android
系统提供的一个多媒体数据库,专门用于存放多媒体信息的,通过ContentResolver
即可对数据库进行操作。如下是其结构:
结构图解:
MediaStore.Files: 共享的文件,包括多媒体和非多媒体信息
MediaStore.Audio: 存放音频信息
MediaStore.Image: 存放图片信息
MediaStore.Vedio: 存放视频信息
每个内部类中都又包含了Media
,Thumbnails
和相应的MediaColumns
,分别提供了媒体信息,缩略信息和 操作字段。
使用
都是通过 ContentResolver
和 Cursor
来操作的,比如查询图片:
//获取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
的源码分析,参考系列文章:
简化MediaStore
操作的第三方库: