2017-03-14 42 views
-1

问题的根源在于UsbFilemjdev:libaums和UsbStorageProvider。如何从UsbStorageProvider文档获取视频缩略图uri

我尝试从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; 
     } 
.... 
} 

但它返回null。 为什么以及如何解决?是否有任何其他的方式来解决这个问题

OR

入住UsbStorageProvider

//row.add(Document.COLUMN_PATH, getUsbPath(file)); 

评论getUsbPath方法调用如何实现getUsbPath(UsbFile)方法返回路径,文件?


假设,我们可以解决的情况,如果我们在AnExplorer转换UsbFileFiledocumentUriFile

在样品话implimenting视频缩略图USB OTG

+0

@pskink这将工作在外部的情况下,我有docId usb1002:/GOPR0462.MP4和docRootId =“usb1002”,但getThumbnail需要很长的ID。检查它的文档 – Qamar

+0

好吧,然后尝试'MediaMetadataRetriever'它有'setDataSource(Context context,Uri uri)'方法,所以它可以工作 – pskink

+0

@pskink无法设置uri。它说java.lang.RuntimeException:setDataSource失败:status = 0xFFFFFFEA – Qamar

回答

1

但它返回null。为什么

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

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

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

或者,找到一些只适用于InputStream的API,并将其传递给UsbFileInputStream

+0

你是对的。我想我应该用'InputStream的是=新UsbFileInputStream(usbFile);'谢谢 – Qamar

+0

这意味着,当我使用usbFile发挥外机和Android VideoView视频,而无需复制内容我将面对的问题。你有什么建议? – Qamar

+0

@Qamar:您可以尝试将'Uri'从'StorageProvider'传递给第三方应用程序。或者,您将不得不使用HTTP库集成,同时要记住这具有安全分歧。 – CommonsWare