看板 AndroidDev 關於我們 聯絡資訊
我要讓使用者選擇檔案,方法是用Intent + ACTION_GET_CONTENT (chooser) 選擇檔案後回傳的資源可分為 content:/和 file:// URI 如果是file:// 格式,就把路徑抓出來即可,因為其實就是指向sdcard下的檔案 問題出在反查content:/ URI的時候,會得到奇怪的路徑: 1. 得到content URI:content://media/xxxx/<資源編號> 2. 反查該資源對應的路徑:/storage/sdcard0/Pictures/<檔案名稱> 3. 用File物件開啟檔案 ... 就掛了 請問 storage/sdcard0/Pictures/ 其實是裝置名稱而不是掛載目錄名稱嗎, 有別的方法可以拿到目錄名稱嗎,或是這樣的結果是正確的? --------------------------- content URI 反查路徑程式片段 ContentResolver res = getContentResolver(); Cursor c=res.query(uri, new String[]{"_data"}, null, null,null); int index = c.getColumnIndexOrThrow("_data"); c.moveToFirst(); path=c.getString(index); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.32.68
qweqweqweqwe:我猜你1. 拿到的是 該筆資料在mediaprovider的 id 02/24 02:37
qweqweqweqwe:也就是你的 "<資源編號>" 用這id去query 02/24 02:37
qweqweqweqwe:mediaprovider 的 _data 欄位 的確會拿到檔案在 02/24 02:37
qweqweqweqwe:本機上的位置 就我所知 應該所有media要去執行 02/24 02:38
qweqweqweqwe:檔案(ex. mp3/video) 都是用這個欄位居多 02/24 02:39
qweqweqweqwe:所以在 mediaScanner運行正常下 _data 這個欄位 02/24 02:40
qweqweqweqwe:應該就是你要的檔案位置沒錯 02/24 02:41
應該說檔案實際位置是 /sdcard/Pictures/<檔案> 但是用URI查詢出來是 /storage/sdcard0/Pictures/<檔案> 導致File object找不到檔案
pico2k:權限? 02/24 10:58
有可能,雖然反查路徑成功,但是無法讀取... 不過這個路徑在DDMS看不到耶 雖然暫時可以自己硬改為正確的路徑啦 不過這可能不是正規做法 ※ 編輯: codemonkey 來自: 118.161.32.68 (02/24 13:35)
qweqweqweqwe:但MediaScanner應該有handle權限的問題 02/24 14:57
qweqweqweqwe:所以MediaProvider裡面應該只會放Current User可以 02/24 14:58
qweqweqweqwe:讀取的檔案才對 02/24 14:58
qweqweqweqwe:mnt/sdcard/ 會掛載到 /storage/sdcard + USERID 02/24 14:59
qweqweqweqwe:記得是這樣 不過在DDMS裡面可以看到它是如何link 02/24 14:59
qweqweqweqwe:就是了 有錯還請指正 02/24 15:01
qweqweqweqwe:對了我記得有特定的資料夾可以讓 user共享檔案的樣子 02/24 15:02
qweqweqweqwe:倒不如把你要執行的檔案放到那個資料夾 02/24 15:03
qweqweqweqwe:或許可以驗證是不是 權限 的問題 02/24 15:03