无法在Android模拟器中读取图像

时间:2015-10-15 00:24:57

标签: android linux permissions android-emulator

好的,我真的迷失在这里:我有一个应该拍摄照片的应用程序(使用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权限规则或某些事情有关......任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

您可以尝试此操作,而不是从MediaStore加载:

bitmap = BitmapFactory.decodeFile(imageUri); showImg.setImageBitmap(bitmap);