Java 如何从UsbStorageProvider文档uri获取视频缩略图
问题的根源是来自和UsbStorageProvider的Java 如何从UsbStorageProvider文档uri获取视频缩略图,java,android,android-contentprovider,usb-otg,Java,Android,Android Contentprovider,Usb Otg,问题的根源是来自和UsbStorageProvider的UsbFile 我尝试从uri.getPath()->/document/usb1002:/GOPR04252.MP4中提取视频帧 像 ImageUtils.getVideoThumbnail(documentUri.getPath(),size.x,size.y) 方法自 但它返回null。为什么以及如何修复它??还有别的办法解决这个问题吗 或 检查注释的getUsbPath方法调用 如何实现返回该文件路径的getUsbPath(UsbF
UsbFile
我尝试从uri.getPath()->/document/usb1002:/GOPR04252.MP4中提取视频帧
像
ImageUtils.getVideoThumbnail(documentUri.getPath(),size.x,size.y)代码>
方法自
但它返回null。为什么以及如何修复它??还有别的办法解决这个问题吗
或
检查注释的getUsbPath
方法调用
如何实现返回该文件路径的getUsbPath(UsbFile)方法
假设,如果我们将UsbFile
转换为File
或documentUri
转换为File
在示例文字中为USB OTG实现视频缩略图
但它返回null。为什么
您正在传入一个随机字符串,该字符串是通过对没有文件
方案的Uri
调用getPath()
获得的。这类似于在指向此网页的Uri
上调用getPath()
,然后想知道为什么您的硬盘驱动器没有位于/questions/42783353/自定义提供程序Uri to path或usbfile to file path
的文件
如何实现返回该文件路径的getUsbPath(UsbFile)方法
按照中的说明将该文件的内容复制到您控制的文件中(例如,getCacheDir()
)
或者,找到一些只与InputStream
一起工作的API,并将UsbFileInputStream
@pskink交给它。这将在外部环境下工作,我有docId usb1002:/GOPR0462.MP4和docRootId=“usb1002”但是getThumbnail需要长id。请检查它的文档OK,然后尝试MediaMetadataRetriever
它有setDataSource(上下文上下文,Uri)
方法,以便work@pskink无法设置uri。它说java.lang.RuntimeException:setDataSource失败:status=0xFFFFFFASO正如@commonware所说,您必须复制该文件的内容“
somewhere@pskink哪个最适合USB视频资源管理器。或者mjdev:libaums.你是对的。我想我应该使用InputStream is=newusbfileinputstream(usbFile)代码>谢谢这意味着当我在exo player和Android VideoView中使用usbFile播放视频而不复制内容时,我将面临问题。您有什么建议?@Qamar:您可以尝试将Uri
从StorageProvider
传递到第三方应用程序。或者,您必须使用HTTP库集成,记住这会带来安全后果。内容位于与Android设备连接的OTG USB中。为什么集成HTTP库plz解释我的知识。顺便说一句,所有视频都使用本机USB explorer播放。仅供参考。我只开发内置图像查看器和视频播放器的USB媒体资源管理器。@Qamar:“所有视频都使用本机USB资源管理器播放”--系统通过内容提供商
提供这些内容,并且系统比您更好地访问可移动存储。“为什么要集成HTTP库”--您可以复制视频,以内容提供商的身份尝试库的存储提供商
,也可以通过嵌入式Web服务器将视频提供给播放机(同样具有安全性分支)。您没有许多选项既可用于所选库,也可用于媒体播放器。
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;
}
....
}
//row.add(Document.COLUMN_PATH, getUsbPath(file));