Android开发之查找本机的图片、视频、音乐、其他类别文件

ContentProvider是Android的四大组件之一,可见它在Android中的作用非同小可。它主要的作用是:实现各个应用程序之间的(跨应用)数据共享,比如联系人应用中就使用了ContentProvider,你在自己的应用中可以读取和修改联系人的数据,不过需要获得相应的权限。其实它也只是一个中间人,真正的数据源是文件或者SQLite等。

Android系统提供的MediaStore功能就是文件类型的ContentProvider,MediaStore中定义了一系列的数据表格,通过ContentResolver提供的查询接口,我们可以得到各种需要的信息。

先来了解一下ContentResolver的查询接口:
Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
Uri:指明要查询的数据库名称加上表的名称,从MediaStore中我们可以找到相应信息的参数,具体请参考开发文档。
Projection: 指定查询数据库表中的哪几列,返回的游标中将包括相应的信息。Null则返回所有信息。
selection: 指定查询条件
selectionArgs:参数selection里有 ?这个符号是,这里可以以实际值代替这个问号。如果selection这个没有?的话,那么这个String数组可以为null。
SortOrder:指定查询结果的排列顺序

1.获取image照片

Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// 获得图片
Cursor mCursor = contentResolver.query(mImageUri, null,
	MediaStore.Images.Media.MIME_TYPE + "=? or "
	+ MediaStore.Images.Media.MIME_TYPE + "=?",
<span style="white-space:pre">	</span>new String[] { "image/jpeg", "image/png" },
	MediaStore.Images.Media.DATE_MODIFIED);
2.获取music音乐
Uri mMusicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
// 要查询的列
String[] mediaColumns = new String[] { MediaStore.Audio.Media.DATA,
	MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE,
	MediaStore.Audio.Media.MIME_TYPE, MediaStore.Audio.Media.SIZE};
// 获取音频
Cursor cursor = contentResolver.query(mMusicUri, mediaColumns, null,
	null, MediaStore.Audio.Media.DATE_MODIFIED);
3. 获取video视频

Uri mVedioUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] thumbColumns = new String[] {
	MediaStore.Video.Thumbnails.DATA,
	MediaStore.Video.Thumbnails.VIDEO_ID };
// 要查询的列
String[] mediaColumns = new String[] { MediaStore.Video.Media.DATA,
	MediaStore.Video.Media._ID, MediaStore.Video.Media.TITLE,
	MediaStore.Video.Media.MIME_TYPE, MediaStore.Video.Media.SIZE};
// 获取视频
Cursor cursor = contentResolver.query(mVedioUri, mediaColumns, null,
	null, MediaStore.Video.Media.DATE_MODIFIED);
4. 获取非媒体文件,如PDF,Word,zip等
Uri mDocumentUri = MediaStore.Files.getContentUri("external");
// 要查询的列
String[] mediaColumns = new String[] {
	MediaStore.Files.FileColumns.DATA,
	MediaStore.Files.FileColumns.TITLE,
	MediaStore.Files.FileColumns.MIME_TYPE,
	MediaStore.Files.FileColumns.SIZE };
String selection = MediaStore.Files.FileColumns.MIME_TYPE + "=? or "
	+ MediaStore.Files.FileColumns.MIME_TYPE + "=?";
	MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
	String mimeTypeZip = mimeTypeMap.getMimeTypeFromExtension("zip");
	String mimeTypeRAR = mimeTypeMap.getMimeTypeFromExtension("pdf");
String[] selectionArgs = new String[] { mimeTypeZip, mimeTypeRAR};

// 获取文档
Cursor cursor = contentResolver.query(mDocumentUri, mediaColumns,
	selection, selectionArgs, null);




你可能感兴趣的:(ContentProvider,MediaStore)