【问题标题】:android - how can I make this MediaStore code work below API 11?android - 我怎样才能让这个 MediaStore 代码在 API 11 下工作?
【发布时间】:2014-05-30 15:00:05
【问题描述】:

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

到目前为止,我有这个:

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,有替代方案吗?

【问题讨论】:

  • 更准确地说,哪个部分不工作?也许,发布您的 logcat 消息。
  • 添加了一些东西,对不起,我是新手:/

标签: android compatibility android-2.2-froyo mediastore


【解决方案1】:

使用来自Support Libraryandroid.support.v4.CursorLoader

编辑:

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

【讨论】:

  • 恐怕问题出在 MediaStore 上:/ 还是谢谢。
【解决方案2】:

我/认为/我明白你想做什么。

很遗憾,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 查找视频缩略图,而是仅查找图像的缩略图。我不确定如何使用这种方法将视频和图像缩略图放在一起。

【讨论】:

  • 谢谢。如果有人能找到如何将两个光标放在一起,我会很高兴。
猜你喜欢
  • 2014-08-19
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多