2017-03-14 70 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

相關問題