如何获取视频缩略图路径而不是位图

6

这个问题实际上已经在这里被问到和回答了。

我已经尝试了多次,但无法使其正常工作。我总是得到一个null返回。请帮帮我吧?

编辑: 我现在正在使用的示例代码:

public static String getVideoThumbnailPath(Context context,
        String filePath) {
    String thubmnailPath;
    String where = Video.Thumbnails.VIDEO_ID
            + " In ( select _id from video where _data =?)";
    final String[] VIDEO_THUMBNAIL_TABLE = new String[] { Video.Media._ID, // 0
            Video.Media.DATA, // 1
    };
    Uri videoUri = MediaStore.Video.Thumbnails.getContentUri("external");

    Cursor c = context.getContentResolver().query(videoUri,
            VIDEO_THUMBNAIL_TABLE, where, new String[] { filePath }, null);

    if ((c != null) && c.moveToFirst()) {
        thubmnailPath = c.getString(1);
        c.close();
        Log.i(TAG, "thumb path: " + thubmnailPath);
        return thubmnailPath;
    } else {
        c.close();
        Log.i(TAG, "thumb path is null");
        return null;
    }
}

2
请问有任何帮助吗?当然。请问有任何相关的代码吗? - shkschneider
你是否获取了相关的权限? - Gautam
似乎您不需要任何权限,但我确实需要这个权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />。 - Nii Laryea
以下解决方案对你有用吗?对我似乎不起作用。 - Lion789
1个回答

14

首先,您需要知道文件的内容uri。如果您有文件路径,这个链接会告诉您如何获取内容uri。

public static String[] thumbColumns = { MediaStore.Video.Thumbnails.DATA };
public static String[] mediaColumns = { MediaStore.Video.Media._ID };

public static String getThumbnailPathForLocalFile(Activity context,
        Uri fileUri) {

    long fileId = getFileId(context, fileUri);

    MediaStore.Video.Thumbnails.getThumbnail(context.getContentResolver(),
            fileId, MediaStore.Video.Thumbnails.MICRO_KIND, null);

    Cursor thumbCursor = null;
    try {

        thumbCursor = context.managedQuery(
                MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,
                thumbColumns, MediaStore.Video.Thumbnails.VIDEO_ID + " = "
                        + fileId, null, null);

        if (thumbCursor.moveToFirst()) {
            String thumbPath = thumbCursor.getString(thumbCursor
                    .getColumnIndex(MediaStore.Video.Thumbnails.DATA));

            return thumbPath;
        }

    } finally {
    }

    return null;
}

public static long getFileId(Activity context, Uri fileUri) {

    Cursor cursor = context.managedQuery(fileUri, mediaColumns, null, null,
            null);

    if (cursor.moveToFirst()) {
        int columnIndex = cursor
                .getColumnIndexOrThrow(MediaStore.Video.Media._ID);
        int id = cursor.getInt(columnIndex);

        return id;
    }

    return 0;
}

参考资料:http://androidcodezs.blogspot.com/2013/10/android-thumbnail-from-video.html


1
MediaStore.Video.Thumbnails.getThumbnailCursor 之前是关键点,谢谢。 - user1922137
我发现加上那段代码之后,它可以正常工作了,现在可以加载缩略图路径。 - kabuto178
thumbCursor.moveToFirst() 在 Android 5.0.1 上始终为 false。 - SpyZip
它运行良好,我希望图像是 MICRO_KIND。有人可以将光标编辑为 kind=micro_kind 吗?我尝试了但失败了。 - Hari krishna Andhra Pradesh
获取本地文件的缩略图路径(Activity context, Uri fileUri)
...这个Uri fileUri参数是哪种类型的文件...(视频..还是..?)
- Muhammad Jamal
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接