Android媒体缩略图。严重的问题?

时间:2010-05-25 05:28:39

标签: android media thumbnails

我一直在玩android的缩略图已经有一段时间了,我看到了一些让我想要尖叫的不一致。我的目标是使用缩略图和文件名列出所有图像的简单列表(以及单独的视频列表)。

设备:HTC Evo(谷歌I / O新增)

首先: http://androidsamples.blogspot.com/2009/06/how-to-display-thumbnails-of-images.html

该代码似乎根本不起作用,缩略图是重复的...一些具有“镜像”效果而一些没有。还有一些不会加载,只显示一个黑色方块。我已经尝试通过从SD卡中删除“alblum thumbs”目录来重建缩略图。 HTC的图库应用程序似乎显示一切正常。

这种方法似乎有效:

Bitmap thumb = MediaStore.Images.Thumbnails.getThumbnail(
    getContentResolver(),
    id, MediaStore.Video.Thumbnails.MICRO_KIND, null);
imageView.setImageBitmap(curThumb);

其中id是原始图像id,而imageView是图像视图。这很棒!但是,奇怪的是,在SimpleViewBinder中使用太慢了。下一步方法:

String [] proj = {MediaStore.Images.Thumbnails._ID};
Cursor c = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
    proj, MediaStore.Images.Thumbnails.IMAGE_ID + "=" +id ,
    null, null);

if (c != null && c.moveToFirst()) {
    Uri thumb = Uri.withAppendedPath(mThumbUri,c.getLong(0)+"");
    imageView.setImageURI(thumb);
}

我应该解释一下,我觉得需要WHERE条件是必需的,因为似乎没有任何保证你的uri对缩略图及其父图像都有相同的ID。这适用于所有当前图像,但是一旦我开始使用相机添加图片,它们就会显示为空白!调试显示了一个可怕的:

SkImageDecoder::Factory returned null

错误,URI返回为无效。这些图像与之前的调用相同。任何人都可以抓住我的逻辑失败或指向一些有效的代码吗?

3 个答案:

答案 0 :(得分:1)

你可以解决你的问题,查询MediaStore.Images.Media._ID而不是缩略图的内容提供商

答案 1 :(得分:1)

根据我的经验,缩略图内容提供程序将返回内容URI和图像文件的路径,即使尚未创建缩略图。如果不存在,MediaStore.Images.Thumbnails.getThumbnail()调用将实际创建缩略图(并将其放在内容URI指向的位置)。我在文档中对此并不清楚,但似乎正在发生的事情。

答案 2 :(得分:1)

加载视频缩略图,其中 mThumbButton 是一个ImageButton:

public void loadThumb(int videoId)
    {
        String [] proj = {MediaStore.Video.Thumbnails._ID};
        Cursor c = managedQuery(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,
            proj, MediaStore.Video.Thumbnails.VIDEO_ID + "=" +videoId ,
            null, null);

        if (c != null && c.moveToFirst()) {
            Uri thumb = Uri.withAppendedPath(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,c.getLong(0)+"");
            mThumbButton.setImageURI(thumb);
        }

    }