项目一直用大佬的第三方PictureSelector控件,突然有个要求要生成图片保存本地,如何生成图片,网上有很多,但是发现一个本来很简单的保存图片到本地,折磨了一下午。。。
直接上代码:
public static void saveImageToGallery(Context context, Bitmap bmp)
{
// 首先保存图片
File appDir = new File(Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_DCIM + File.separator + "DjgxPic");
if (!appDir.exists())
{
Log.e(TAG, "去创建文件夹");
appDir.mkdirs();
}
String fileName = "djgx_" + System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try
{
Log.e(TAG, "开始保存图片");
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
// 最后通知图库更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
Toast.makeText(context, "图片保存成功 ", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e)
{
e.printStackTrace();
Log.e(TAG, "保存图片失败:" + e.toString());
Toast.makeText(context, "图片保存失败", Toast.LENGTH_LONG).show();
} catch (IOException e)
{
e.printStackTrace();
Log.e(TAG, "保存图片失败:" + e.toString());
Toast.makeText(context, "图片保存失败", Toast.LENGTH_LONG).show();
}
}
保存图片至本地,一般就2种错误
1.open failed: EACCES (Permission denied)
2.open failed: ENOENT (No such file or directory)
普通的下载一般不会有什么问题
第一个问题,就是因为权限
①.动态权限申请
②.已经申请过动态权限的,在AndroidManifest的application中添加android:requestLegacyExternalStorage="true"
这一句即可
第二个问题,路径
Android10,也就是SdkVersion29,系统规定了图片保存的路径,不能像以前一样乱设置路径,必须在系统路径下新建文件夹,否则就是一直无法创建文件夹
具体可以看Android 创建文件夹失败(File.mkdirs())
记录一下,方便日后用到