Android, media scan doesn't generate thumbnails?

大憨熊 提交于 2019-12-23 05:34:13

问题


I have image files which don't have thumbnails. (imported from my external carmera using NFC)

I want to create thumbnails for my image picker view. (has to be fast)

At this moment, I'm not even sure "MEDIA SCAN" means "generating thumbnail" or what.
I tried to scan file using mMediaScannerConnection.scanFile(mPath, null);

onScanCompleted gets called and I try to get thumbnail using the following two version of functions.

I get null thumbnailPath for both functions, I don't get why..

    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;
    }

-- edit --

Here's how I try to get thumbnails.

  1. first create a mapping from image-id to thumbnail-path.

    protected Map getThumbnailPathFromDB() { Map result = new HashMap(); Cursor thumbCursor = null; thumbCursor = getContentResolver().query( MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, null, null, 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. next I iterate all images and try to find thumbnails from the mapping I created above

    ContentResolver cr = getContentResolver();
    Cursor cursor = cr.query( Images.Media.EXTERNAL_CONTENT_URI, null, null, null, Images.ImageColumns.DATE_MODIFIED + " DESC");

    //thumbnailPathList is the mapping I created above, imageId is the id of image obtained from the cursor
    String thumbnailPath = thumbnailPathList.get(new Long(imageId)); // thumbnailPath are occasionally null here!,

I tested my code on about 10 devices.
They all have images which I can't find thumbnails for.

来源:https://stackoverflow.com/questions/24801222/android-media-scan-doesnt-generate-thumbnails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!