好的,我真的迷失在这里:我有一个应该拍摄照片的应用程序(使用Camera Intent)并在图像视图中显示它。
无论我做什么,我都无法在模拟器中运行,它可以拍照(在虚拟sd文件夹上使用adb shell检查:文件在那里),将其保存到虚拟SD卡。 ..但是无法读取它以便在ImageView中显示它,它不断抛出:
W / System.err:java.io.FileNotFoundException:/storage/0CE8-3A18/pics/IMG_XXXXXXXXXX.jpg:open failed:EACCES(Permission denied)
奇怪的是,这只发生在模拟器中,当我在手机上部署时,它工作得很好(拍照并在ImageView中显示)
我在Linux Mint 17.2(64位)上使用Android Studio 1.3.2,我的清单有:
<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权限规则或某些事情有关......任何帮助都会非常感激。
答案 0 :(得分:0)
您可以尝试此操作,而不是从MediaStore加载:
bitmap = BitmapFactory.decodeFile(imageUri);
showImg.setImageBitmap(bitmap);