好吧,我真的迷失在這裏:我有一個應用程序應該拍攝一張照片(使用Camera Intent)並將其顯示在圖像視圖中。在Android模擬器中無法讀取圖像
無論我做什麼,我都無法讓它在模擬器中工作,它將圖片正常(在虛擬sd文件夾中檢查它與adb外殼:文件存在),將其保存到虛擬SD卡中。 ,但不能讀取它,才能在ImageView的顯示,它不斷拋出:
W/System.err的:java.io.FileNotFoundException:/storage/0CE8-3A18/pics/IMG_XXXXXXXXXX.jpg:打開失敗:EACCES(權限被拒絕)
奇怪的是,這隻發生在模擬器,當部署在我的手機,它工作得很好(把圖片和顯示在ImageView中)
我使用過Android Studio 1.3.2 Linux Mint的17.2(64位)和我的表現有:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.STORAGE" />
和代碼來檢索保存的圖像並在ImageView上顯示:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// Image captured and saved to fileUri specified in the Intent
Bitmap bitmap;
try {
/*************************************************
//THIS IS THE CODE THAT FAILS, ONLY IN EMULATOR
***************************************************/
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
bitmap = Bitmap.createScaledBitmap(bitmap, 300, 300, false);
showImg.setImageBitmap(bitmap);
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else if (resultCode == RESULT_CANCELED){
// User cancelled the image capture
} else {
// Image capture failed, advise user } }
}
}
我不知道爲什麼會發生這種情況,我認爲它可能與一些模糊的Linux許可規則或類似的東西有關...任何幫助將不勝感激。
嗨L.Swifter,我想: 位= BitmapFactory.decodeFile(imageUri.getPath()); 由於decodeFile接受一個字符串作爲參數,但它仍然拋出相同的錯誤: E/BitmapFactory:無法解碼流:java.io.FileNotFoundException:/存儲器0CE8-3A18/pics/IMG_20151015_235105.jpg:打開失敗:EACCES(權限被拒絕) 我開始認爲Camera Intent可能不會以正確的格式保存它們,或者保存文件時會損壞... 接下來我要嘗試的是將圖像添加到虛擬SD卡,然後嘗試從程序使用相同的代碼加載該圖像,並看看它是怎麼回事。 – melev
我今天試過,你和我的方法都在我的模擬器上工作(android studio 2.1,ubuntu)。很難找到理由,也許最好讓這個問題繼續下去。 –