Android 多媒体之MediaStore

来源:互联网 发布:linux init3 编辑:程序博客网 时间:2024/05/17 06:16

概述

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

MediaStore

结构图解:

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

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

使用

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

//获取cursorCursor 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; //内部库URIEXTERNAL_CONTENT_URI;//外部库URICONTENT_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

0 0