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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值