0

我在這裏講的USB而不是存儲卡或Internel內存,需要一個不是Uri的確切路徑。想要一個在Android 6棉花糖從USB的文件實時路徑?

直到Android L我從/ mnt或/存儲或任何其他目錄獲得文件路徑。但在棉花糖,我沒有找到我的USB完全在哪裏。

然後我向着存儲訪問框架前進,但它沒有返回實際路徑,它返回給我一個Uri。

我也經過AFileChooser項目和一個計算器後 Android Gallery on KitKat returns different Uri for Intent.ACTION_GET_CONTENT

但它不是helpfull.So有什麼辦法,我可以訪問真實路徑等(/storage/abc/filename.mp4)。

回答

1

然後我向着存儲訪問框架前進,但它沒有返回實際路徑,它返回給我一個Uri。

這是因爲Storage Access Framework不適用於文件。它適用於存儲提供商。歡迎存儲提供商存儲他們的開發者想要的內容。這可以包括存儲在服務器上的內容,存儲在數據庫中的內容,存儲在加密容器中的內容,即時生成的內容等。這些都沒有一個對你有意義的「實際路徑」。而且,如果您使用的是存儲訪問框架,用戶可以選擇用戶想要的任何存儲提供商。

所以有什麼辦法可以像訪問Realpath一樣(/storage/abc/filename.mp4)。

製作您自己的內容副本,使用Uri和Java I/O。然後你知道你的副本的「實際路徑」。

A Uri就像一個URL。這個網頁的URL不需要映射到計算機上的某個文件。沒有魔術算法會將URL轉換爲本地文件路徑...除了自己下載內容並創建本地文件之外。

+0

精心製作自己的內容副本,我可以製作視頻file.any鏈接的副本? – wVV

+0

@wVV:使用'ContentResolver'和'openInputStream()'獲得'Uri'標識的內容的'InputStream'。在本地文件上創建一個'FileOutputStream'(例如'getCacheDir()')。使用Java I/O將'InputStream'中的字節複製到'OutputStream'。還有其他的實現,但這是典型的方法和模式的一個例子。 – CommonsWare

+0

如果文件大小大於250mb,則會在系統上創建開銷。 – wVV