我期待下面的代码将图像保存到我的本地SD卡但是当我运行应用程序并触发saveCanvasImage()方法时,它没有这样做。当我查看LogCat时,我可以找到一个System.err条目。文字说:
java.io.FileNotFoundException:/mnt/sdcard/drawPic1.png:open failed:EACCES(权限被拒绝)
我认为这会创建一个新的png文件并将其保存在目录中。我显然错了。我可以在这里做些什么才能让它发挥作用?
public void saveCanvasImage() {
Log.d("bitmap","strm");
tv.setDrawingCacheEnabled(true);
Bitmap bm = tv.getDrawingCache();
File fPath = Environment.getExternalStorageDirectory();
File f = null;
f = new File(fPath, "drawPic1.png");
try {
FileOutputStream strm = new FileOutputStream(f);
bm.compress(CompressFormat.PNG, 80, strm);
strm.close();
}
catch (IOException e){
e.printStackTrace();
}
}
答案 0 :(得分:7)
你有权限吗?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 1 :(得分:1)
您确定已添加此权限以写入外部存储空间
android.permission.WRITE_EXTERNAL_STORAGE
答案 2 :(得分:0)
在项目的清单文件权限
中添加以下权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 3 :(得分:0)
我想你忘了创建一个新文件!
改为使用它并在manifest中设置权限:
public void saveCanvasImage(Bitmap b) {
File f = new File(Environment.getExternalStorageDirectory().toString() + "/img.png");
f.createNewFile(); // your mistake was at here
try {
FileOutputStream fos = new FileOutputStream(f);
b.compress(CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
}catch (IOException e){
e.printStackTrace();
}
}
和许可:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 4 :(得分:0)
您可以使用此代码
Bitmap bbicon;
bbicon=BitmapFactory.decodeResource(getResources(),R.drawable.bannerd10);
//ByteArrayOutputStream baosicon = new ByteArrayOutputStream();
//bbicon.compress(Bitmap.CompressFormat.PNG,0, baosicon);
//bicon=baosicon.toByteArray();
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
OutputStream outStream = null;
File file = new File(extStorageDirectory, "er.PNG");
try {
outStream = new FileOutputStream(file);
bbicon.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
} catch(Exception e) {
}
以及权限。