无法在android文件系统中保存文件

时间:2011-08-30 21:21:56

标签: android filesystems

我正在尝试使用相机捕捉照片并将其保存(稍后预览)并且它似乎与模拟器一起使用但是当我在GalaxyS上使用它时 - 它不保存文件(我使用RootExplorer要检查)并且没有预览。

我做错了什么?

保存文件的代码:

public void onPictureTaken(byte[] data, Camera camera) {
      FileOutputStream outStream = null;
      try {
        // Write to SD Card
        String filename = "captured_image.jpg";

        Log.d("@@--File name--@@", filename);
        outStream = openFileOutput(filename, Context.MODE_WORLD_READABLE); // <9>
        outStream.write(data);
        outStream.close();
        Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
      } catch (FileNotFoundException e) { // <10>
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      } finally {
      }
      Log.d(TAG, "onPictureTaken - jpeg");
    }

显示代码:

ImageView imagePrev = (ImageView) findViewById(R.id.image_capturedimagepreview_preview);


        Bitmap bmp = null;
        try {
            bmp = BitmapFactory.decodeStream(openFileInput("captured_image.jpg"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } 
        imagePrev.setImageBitmap(bmp);

2 个答案:

答案 0 :(得分:0)

你在哪里存储图像?你尝试过使用绝对路径吗?您是否在清单中具有读/写外部权限? 我在程序中使用了类似的东西来将图像存储在与我的包名相同的目录中。

File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName() );
File imagePath = new File(path,"capture_image.jpg");

修改 如果您第一次将sd卡用于给定的软件包名称,则需要在尝试写入之前创建该目录。

答案 1 :(得分:0)

我想我发现了这个问题。 而不是outStream = openFileOutput(filename, Context.MODE_WORLD_READABLE);我应该使用outStream = getApplicationContext().openFileOutput(filename, Context.MODE_WORLD_READABLE);

但现在我正面临一个新的 - 文件似乎已损坏,因为当我用Android的查看器打开它时它只是黑色,其大小总是18474字节。

任何想法?