Android,媒体扫描不会生成缩略图?

时间:2014-07-17 10:34:36

标签: android thumbnails media

我的图片文件没有缩略图。 (使用NFC从我的外部卡梅拉进口)

我想为我的图片选择器视图创建缩略图。 (必须快)

此时此刻,我甚至不确定" MEDIA SCAN"意味着"生成缩略图"或者是什么 我尝试使用mMediaScannerConnection.scanFile(mPath, null);

扫描文件

onScanCompleted被调用,我尝试使用以下两个版本的函数来获取缩略图。

我得到两个函数的null thumbnailPath,我不明白为什么......

    private String getThumbnailPath(long imageId) {
        ContentResolver cr = this.mContext.getContentResolver();

        Cursor c = MediaStore.Images.Thumbnails.queryMiniThumbnail(cr, imageId, MediaStore.Images.Thumbnails.MINI_KIND, null);
        try {
            if (c.moveToNext()) {
                int dataId = c.getColumnIndex( Images.Thumbnails.DATA);
                String strThumPath = c.getString(dataId);
                Log.i("ScanTest", "strThumPath = " + strThumPath );
                return strThumPath;
            }
        } finally {
            if (c != null) c.close();
        }

        return null;
    }

    private String getThumbnailPath2( long imageId ){
        // http://wikicloud.blogspot.kr/2010/10/scanfile.html
        ContentResolver cr = this.mContext.getContentResolver();

        Cursor c = cr.query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, null, MediaStore.Images.Thumbnails.IMAGE_ID + "= ?" , new String[]{String.valueOf(imageId)}, null);
        try {
            if (c.moveToNext()) {
                int dataId = c.getColumnIndex( Images.Thumbnails.DATA);
                String strThumPath = c.getString(dataId);
                Log.i("ScanTest", "strThumPath = " + strThumPath );
                return strThumPath;
            }
        } finally {
            if (c != null) c.close();
        }

        return null;
    }

- 编辑 -

以下是我尝试获取缩略图的方式。

  1. 首先创建从image-id到thumbnail-path的映射。

    protected Map getThumbnailPathFromDB(){     Map result = new HashMap();     Cursor thumbCursor = null;     thumbCursor = getContentResolver()。query(                 MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,                 空值,                 空值,                 null,null);

    if (thumbCursor.moveToFirst()) {
        do {
            String path = thumbCursor.getString(thumbCursor
                    .getColumnIndex(MediaStore.MediaColumns.DATA));
            long imageId = thumbCursor.getLong(thumbCursor
                    .getColumnIndex(MediaStore.Images.Thumbnails.IMAGE_ID));
            result.put(new Long(imageId), path);
        } while(thumbCursor.moveToNext());
    }
    
    thumbCursor.close();
    
    return result;
    
  2. 接下来我迭代所有图像并尝试从我上面创建的映射中找到缩略图

    ContentResolver cr = getContentResolver();
    光标游标= cr.query(             Images.Media.EXTERNAL_CONTENT_URI,null,              null,null,Images.ImageColumns.DATE_MODIFIED +" DESC&#34);

    // thumbnailPathList是我在上面创建的映射,imageId是从光标
    获得的图像的id String thumbnailPath = thumbnailPathList.get(new Long(imageId)); // thumbnailPath偶尔会在这里为空!,

  3. 我在大约10台设备上测试了我的代码 它们都有我无法找到缩略图的图像。

0 个答案:

没有答案