Android 2.2 GetThumbnail返回错误的位图

时间:2010-09-29 09:41:21

标签: android thumbnails mediastore

我正在使用MediaStore.Video.Thumbnails.getThumbnail()方法 获取我在列表中显示的文件的缩略图。这有效 好吧,开始,但过了一会儿我得到的缩略图 不是与文件匹配的那些。 GetThumbnail()开始后 失败似乎一遍又一遍地返回相同的Bitmap, 无论我尝试哪个文件。这发生在我的HTC Desire上, 运行Android 2.2,并且很难重现 - 它会在一段时间后才开始发生。

这是我的源代码(缩减版):

static public Bitmap GetThumbnailForFile(File p_File, Activity
p_activity)
{
    long imageID = GetImageID(p_File, p_activity);
    if (imageID < 0)
    {
        return null;
    }
    return
MediaStore.Images.Thumbnails.getThumbnail(p_activity.getContentResolver(),
imageID, Thumbnails.MICRO_KIND, null);
}

public static long GetImageID(File p_File, Activity p_activity)
{
    long result =-1;
    Cursor c =
p_activity.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        new String[]{MediaStore.Images.Media._ID +""},
        MediaStore.Images.Media.DATA +" like '" + p_File.getAbsolutePath(),
        null, null);
    c.moveToNext();
    if (!c.isAfterLast())
    {
        result = c.getLong(0);
    }
    c.close();
    return result;
}

我也在做同样的事情来加载视频缩略图。我用过 一些调试代码来检查GetImageID()返回的值, 而且我很确定它们是正确的。

任何人都可以看到我可能做错了吗?或者知道任何原因 一段时间后缩略图是否停止正常生成?

1 个答案:

答案 0 :(得分:0)

嗯,你的查询中有一个“喜欢”,你只有一个'。此外,您不会保护您的查询免受SQL注入!

我会推荐这样的查询:

p_activity.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    new String[]{ MediaStore.Images.Media._ID +"" },
    MediaStore.Images.Media.DATA + "=?",
    new String[]{ p_File.getAbsolutePath() },
    null);

也许这就是问题所在。