Android如何从图库中获取视频文件的缩略图

问题描述:

我需要在列表视图中显示从图库中选择的视频文件. 我已经成功获取了视频文件的uri,但是我无法获取视频文件的缩略图.这是我用于从uri提取视频文件图像的代码,但会导致应用崩溃.还有其他方法可以获取视频文件的图像吗?如果可以通过其他任何方式实现,请帮助我....

I need to show the selected video file from gallery in my listview. I have successfully fetched the uri of video file but i am not able to get the thumb image of video file. Here is the code i have used for fetching image of video file from uri, but is causes the app to crash. Is there any other way to get image of video file..? please assist me if it can be achieved in any other way....

public static String getFileMetaData(Context context,String uri){
        Uri queryUri = Uri.parse(uri);
        // Get relevant columns for use later.
        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
        };
// Return only video and image metadata.
        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;

        CursorLoader cursorLoader = new CursorLoader(
                context,
                queryUri,
                projection,
                selection,
                null, // Selection args (none).
                MediaStore.Files.FileColumns.DATE_ADDED + " DESC" // Sort order.
        );

        Cursor cursor = cursorLoader.loadInBackground();
        int columnIndex = cursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA);

        Log.d("MyTag","***************** : " + cursor.getString(columnIndex));

        cursor.close();
        return null;
    }

通过一些更改解决了此问题.实际上我的问题是我给的文件路径错误.我一直在给从画廊获得的Uri, 现在我已经更改了从Uri获得真实路径的代码, 然后将它们应用于ThumbnailUtils以创建缩略图.

Fixed this problem with some changes. Actually my problem was the file path that i had given is wrong.I have been giving the Uri got from gallery, now i had changed the code for getting the real path from Uri and then applied them to ThumbnailUtils for creating thumb image.

Uri uri = Uri.parse(uri);
String mUri = AppUtils.getRealPathFromURI(mActivity,uri,"VIDEO");
mImageSend.setImageBitmap(ThumbnailUtils.createVideoThumbnail(
                            mUri, MediaStore.Video.Thumbnails.FULL_SCREEN_KIND));


public static String getRealPathFromURI(Context context,Uri contentURI,String type) {

        String result  = null;
        try {
            Cursor cursor = context.getContentResolver().query(contentURI, null, null, null, null);
            if (cursor == null) { // Source is Dropbox or other similar local file path
                result = contentURI.getPath();
                Log.d("TAG", "result******************" + result);
            } else {
                cursor.moveToFirst();
                int idx = 0;
                if(type.equalsIgnoreCase("IMAGE")){
                    idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                }else if(type.equalsIgnoreCase("VIDEO")){
                    idx = cursor.getColumnIndex(MediaStore.Video.VideoColumns.DATA);
                }else if(type.equalsIgnoreCase("AUDIO")){
                    idx = cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DATA);
                }
                result = cursor.getString(idx);
                Log.d("TAG", "result*************else*****" + result);
                cursor.close();
            }
        } catch (Exception e){
            Log.e("TAG", "Exception ",e);
        }
        return result;
    }