Android 压缩位图时出现异常
在我的Android项目中,我试图在给定位置将位图保存到SD卡 当我运行这个程序时,每次都会得到一个Android 压缩位图时出现异常,android,file-io,bitmap,compression,ioexception,Android,File Io,Bitmap,Compression,Ioexception,在我的Android项目中,我试图在给定位置将位图保存到SD卡 当我运行这个程序时,每次都会得到一个IOException,表示权限被拒绝。这是关于创建FileOutputStream的 这使我相信我缺少权限,但我包含了读取和写入外部存储。它们在my使用sdk块之前声明,并且在应用程序块之外。我还将文本读/写到应用程序中其他位置的文件中,效果很好。我当前的代码被修改以匹配我在网上找到的几个解决方案,但我无法成功保存位图文件 如果有人能指出我的错误,我将万分感激 ImageView ima
IOException
,表示权限被拒绝。这是关于创建FileOutputStream的
这使我相信我缺少权限,但我包含了读取和写入外部存储。它们在my使用sdk
块之前声明,并且在应用程序块之外。我还将文本读/写到应用程序中其他位置的文件中,效果很好。我当前的代码被修改以匹配我在网上找到的几个解决方案,但我无法成功保存位图
文件
如果有人能指出我的错误,我将万分感激
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();
}
更改此设置
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卡之前,我们需要检查如果使用Environment.getExternalStorageDirectory().toString()+“Recruites”;?我在getAbsolutePath()中遇到了类似的问题,解决了这个问题。做一个日志。要查看logcat中的完整路径,您是否在emulatorI上运行了此操作,Ori将输出路径更改为Environment.getExternalStorageDirectory().toString()+“/Recruites”;并使用日志进行测试,以查看我的文件使用的是以下路径W//mnt/sdcard/recruites/2013-06-01-17-26-50.jpg(23309),当我在创建日志未显示的文件输出流后尝试测试时,这意味着出现了异常。我还尝试使用一个备用构造函数FileOutputStream(文件),但仍然遇到了异常。山姆:我正在我的设备上运行这个程序。我刚刚发现如何检查异常消息,并用它来确定问题是“权限被拒绝”,但我在程序的其他地方读/写文本文件,效果很好。我尝试了该文件的替代构造函数,但它没有改变任何内容。此外,我的权限还可以,它们已经过检查,并且我对应用程序其他部分中的外部存储进行了读/写操作,没有错误。请将file.getPath()更改为file.getAbsolutePath()