2017-06-22 55 views
0

我從圖庫中選擇圖像。現在我將它加載到臨時文件中,並可以在ImageView中顯示它。一切正常。從圖庫中加載圖像不會兩次工作

Uri uri = data.getData(); 

File file = new File(uri+""); 

String fileName = file.getName(); 
String filePath = file.getParent(); 

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri); 

//here come's the code to save the temp-file and so on 

在fileName和filePath中,我保存名稱和路徑供以後使用。因爲如果用戶想要保存圖像,我想製作它們的副本。

URI shown in the debugger: content:/media/external/images/media/12345 
filePath: content:/media/external/images/media 
fileName: 12345 

如果我要救我使用的文件名和文件路徑來構建URI,並希望做同樣類似上面的圖像。但它不起作用。我從MediaStore中得到一個FileNotFoundException「no content provider」。嗯 - 在我刪除應用程序以進行全新測試之前,出現了「沒有這樣的文件或目錄」,我想我通過READ_EXTERNAL_STORAGE權限消除了「無內容提供者」異常。

Uri uri = Uri.parse(filePath +"/"+ fileName); 
Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri); 

這裏我也看到了調試器中正確的URI。

出了什麼問題?

我已經在AndroidManifest中設置了權限READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE。

回答

0

在文件名和文件路徑我保存名稱和路徑爲以後使用

一個Uri不是一個文件,而你肯定不是一個文件。

出了什麼問題?

您的Uri有一個content計劃。這由ContentProvider服務。你不指出這個Uri來自哪裏,但我會猜測它是從ACTION_GET_DOCUMENT或類似的東西。在這種情況下,就像需要工作會話的Web網址一樣,your access to the content identified by that Uri is short

如果您想要長期訪問內容,請將其下載到您的應用中,就像您從Web網址下載內容一樣。

+0

我從畫廊的圖像在一個打算,如: \t \t意向galleryIntent =新意圖(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(galleryIntent,RESULT_LOAD_IMG); – chrispi

+0

我想這樣做 - 將圖像複製到我的應用程序中,但稍後再複製一次。但我也喜歡獲取真實的文件名和圖像的真實路徑。我怎樣才能從「data.getData()」或Uri獲取這些信息?我喜歡保存這些信息,以減少在我的數據庫中兩次擁有相同圖像的可能性 - 我知道,如果圖像移動到另一個文件夾,我也有這個問題,但這是我以後要解決的另一個問題。 – chrispi

+0

@chrispi:「我怎樣才能從」data.getData()「或Uri獲取這些信息?」 - 你沒有。沒有要求'Uri'映射到文件,更不用說可以訪問的文件。如果你想要一個文件,複製圖像,並立即做,而不是「以後」,因爲你不再有權訪問它。 – CommonsWare