如何从 UsbStorageProvider 文档 uri 获取视频缩略图

How to get video thumbnail from UsbStorageProvider document uri

问题的根源是来自 mjdev:libaums 和 UsbStorageProvider 的 UsbFile

我尝试从 uri.getPath() -> /document/usb1002:/GOPR04252.MP4

中提取视频帧

喜欢 ImageUtils.getVideoThumbnail(documentUri.getPath(), size.x, size.y);

来自 ImageUtils

的方法
public static Bitmap getVideoThumbnail(String path, int mMaxWidth, int mMaxHeight){
        Bitmap.Config mDecodeConfig = Bitmap.Config.RGB_565;
        ImageView.ScaleType mScaleType = ImageView.ScaleType.CENTER_CROP;

        File bitmapFile = new File(path);
        Bitmap bitmap = null;

        if (!bitmapFile.exists() || !bitmapFile.isFile()) {
            return bitmap;
        }
....
}

但它 return 无效。 为什么以及如何解决?有没有其他方法可以解决这个问题

检查 UsbStorageProvider

中评论的 getUsbPath 方法调用
//row.add(Document.COLUMN_PATH, getUsbPath(file));

如何实现 return 文件路径的 getUsbPath(UsbFile) 方法?


假设,如果我们将UsbFile转换为File或将documentUri转换为File

,我们可以解决这种情况

AnExplorer 中为 USB OTG

实现视频缩略图示例

But it return null. Why

您正在传递一个随机字符串,该字符串是通过在 Uri 上调用 getPath() 获得的,而 具有 file 方案.这类似于在指向此网页的 Uri 上调用 getPath(),然后想知道为什么您的硬盘没有位于 /questions/42783353/custom-provider-uri-to-path-or-usbfile-to-file-path.

的文件

How to implement getUsbPath(UsbFile) method that return path to that file?

按照 the documentation 中的说明将该文件的内容复制到您控制的文件中(例如,getCacheDir())。

或者,找到一些只适用于 InputStream 的 API,然后将其交给 UsbFileInputStream