android - 如何让这个MediaStore代码在API 11下运行?

时间:2014-05-30 15:00:05

标签: android compatibility android-2.2-froyo mediastore

我一直在研究一些代码来收集图像和视频缩略图并将它们加载到光标中。

到目前为止,我有这个:

String[] projection = { MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DATA,
MediaStore.Files.FileColumns.DATE_ADDED,
MediaStore.Files.FileColumns.MEDIA_TYPE,
MediaStore.Files.FileColumns.MIME_TYPE,
MediaStore.Files.FileColumns.TITLE };
String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE + " OR "
+ MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO;
Uri queryUri = MediaStore.Files.getContentUri("external");
CursorLoader cursorLoader = new CursorLoader(this, queryUri,
                                projection, selection, null,
                                MediaStore.Files.FileColumns.DATE_ADDED
                                + " DESC");
Cursor cursor = cursorLoader.loadInBackground();

不幸的是,它仅适用于API 11及更高版本。如何更改它以使其与API 8一起使用?

编辑:我正在使用支持CursorLoader,MediaStore函数正在创建问题。

MediaStore.Files.FileColumns需要API 11,还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

使用android.support.v4.CursorLoader

中的Support Library

编辑:

FileColumns延长MediaColumns,因此请改用MediaColumns。 对于uri,您应该根据您要查询的内容选择Uri。如果是图片,请使用Images.Media.EXTERNAL_CONTENT_URI,对于音频,请使用Audio.Media.EXTERNAL_CONTENT_URI

答案 1 :(得分:0)

我/我/我明白你想要做什么。

不幸的是,FileColumns.MEDIA_TYPE和此类函数只能在API 11及更高版本中使用。我建议你为少于11的API创建一个单独的函数:

        if (Integer.valueOf(android.os.Build.VERSION.SDK_INT) >= android.os.Build.VERSION_CODES.HONEYCOMB) {
        String[] from = { MediaStore.Files.FileColumns._ID,
                MediaStore.Files.FileColumns.DATA,
                MediaStore.Files.FileColumns.DATE_ADDED,
                MediaStore.Files.FileColumns.MEDIA_TYPE,
                MediaStore.Files.FileColumns.MIME_TYPE,
                MediaStore.Files.FileColumns.TITLE };
        projection = from;
        String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE + " OR "
                + MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO;
        Uri queryUri = MediaStore.Files.getContentUri("external");
        cursorLoader = new CursorLoader(this, queryUri, projection,
                selection, null, MediaStore.Files.FileColumns.DATE_ADDED
                        + " DESC");
    } else {
        String[] from = { MediaStore.MediaColumns.DATE_ADDED };
        projection = from;
        cursorLoader = new CursorLoader(this, sourceUri, null, null, null,
                MediaStore.MediaColumns.DATE_ADDED + " desc");
    }
    Cursor cursor = null;
    if (cursorLoader != null) {
        cursor = cursorLoader.loadInBackground();
            }

此功能无法找到API< 11 的视频缩略图,而是仅查找图像的缩略图。我不确定如何使用这种方法将视频和图像缩略图放在一起。