【问题标题】:Can't read image in Android Emulator无法在 Android 模拟器中读取图像
【发布时间】:2016-01-13 06:44:44
【问题描述】:

好吧,我真的迷路了:我有一个应用程序应该拍照(使用相机意图)并将其显示在图像视图中。

无论我做什么,我都无法让它在模拟器中工作,它可以拍照(用虚拟 sd 文件夹上的 adb shell 检查它:文件在那里),将它保存到虚拟 SD 卡......但无法读取它以便在 ImageView 中显示它,它一直在抛出:

W/System.err:java.io.FileNotFoundException:/storage/0CE8-3A18/pics/IMG_XXXXXXXXXX.jpg:打开失败:EACCES(权限被拒绝)

奇怪的是,这只发生在模拟器中,当部署在我的手机上时,它工作得很好(拍照并在 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 模拟器权限规则有关......任何帮助将不胜感激。

【问题讨论】:

    标签: android linux permissions android-emulator


    【解决方案1】:

    您可以试试这个,而不是从 MediaStore 加载:

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

    【讨论】:

    • 嗨 L.Swifter,我试过了:bitmap = BitmapFactory.decodeFile(imageUri.getPath());因为 decodeFile 将 String 作为参数,但它仍然抛出相同的错误: E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/0CE8-3A18/pics/IMG_20151015_235105.jpg: open failed: EACCES (Permission拒绝)我开始认为Camera Intent可能无法以正确的格式保存它们,或者文件在保存时会损坏......接下来我要尝试将图像添加到虚拟SD卡中,然后尝试加载使用相同代码的程序中的图像,看看它是如何进行的......
    • 我今天试过了,你和我的方法都适用于我的模拟器(android studio 2.1,ubuntu)。很难找到原因,或许还是把这个问题抛开吧。
    猜你喜欢
    • 2019-10-28
    • 1970-01-01
    • 2015-03-08
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2013-05-03
    • 2020-04-29
    相关资源
    最近更新 更多