压缩Bitmap时的Android IOException

时间:2013-06-01 07:01:44

标签: android file-io bitmap compression ioexception

在我的Android项目中,我试图将位图保存到给定位置的SD卡。

当我运行此操作时,我每次都会得到一个IOException,说许可被拒绝。这是在创建FileOutputStream。

这让我相信我缺少权限,但我包含READ and WRITE_EXTERNAL_STORAGE。它们在我的uses-sdk块之前声明,并且在应用程序块之外。我还read/write发送到我的应用程序中其他地方的文件,并且工作得很好。我当前的代码已经过修改,以匹配我在网上找到的几个解决方案,但我无法成功保存bitmap文件。

如果有人能指出我的错误,我会非常感激。

    ImageView imageView = (ImageView) findViewById(R.id.new_pnm_pic);
    Bitmap bm = (Bitmap)data.getExtras().get("data");
    imageView.setImageBitmap(bm);
    String outPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Recruits";

    try {
          File d = new File(outPath);
          if (!d.exists())
          d.mkdirs();

          SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd-kk-mm-ss");
          String currentTime = sd.format(new Date());

          File file = new File(outPath+'/'+currentTime+".jpg");             
          FileOutputStream fOut = new FileOutputStream(file.getPath());

          bm.compress(Bitmap.CompressFormat.JPEG, 50, fOut);

          fOut.flush();
          fOut.close();

       }
   catch(IOException ioe){
     Toast.makeText(this, "Nice try but didn't work", Toast.LENGTH_SHORT).show();
        }

1 个答案:

答案 0 :(得分:2)

更改此

File file = new File(outPath+'/'+currentTime+".jpg");



File file = new File(d+'/'+currentTime+".jpg");

并为清单文件添加权限: -

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

修改
在我们开始将图像保存到SD卡之前,我们需要检查是否sd card is mounted or not