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);