有三种方法如下:三个方法都需要动态申请读写权限否则保存图片到相册也会失败
方法一:
/**
* 保存bitmap到本地
*
* @param bitmap Bitmap
*/
public static void saveBitmap(Bitmap bitmap, String path) {
String savePath;
File filePic;
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
savePath = path;
} else {
Log.e("tag", "saveBitmap failure : sdcard not mounted");
return;
}
try {
filePic = new File(savePath);
if (!filePic.exists()) {
filePic.getParentFile().mkdirs();
filePic.createNewFile();
}
FileOutputStream fos = new FileOutputStream(filePic);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (IOException e) {
Log.e("tag", "saveBitmap: " + e.getMessage());
return;
}
Log.i("tag", "saveBitmap success: " + filePic.getAbsolutePath());
}
方法二(针对小于API29以下方法,此方法会通知图库更新)
/**
* API 29及以下保存图片到相册的方法
*
* @param toBitmap 要保存的图片
*/
private void saveImage(Bitmap toBitmap) {
String insertImage = MediaStore.Images.Media.insertImage(getContentResolver(), toBitmap, "壁纸", "搜索猫相关图片后保存的图片");
if (!TextUtils.isEmpty(insertImage)) {
Toast.makeText(this, "图片保存成功!" + insertImage, Toast.LENGTH_SHORT).show();
Log.e("打印保存路径", insertImage + "-");
}
}
方法三(针对大于API29以下方法,此方法也会通知图库更新)
/**
* API29 中的最新保存图片到相册的方法
*/
private void saveImage29(Bitmap toBitmap) {
//开始一个新的进程执行保存图片的操作
Uri insertUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
//使用use可以自动关闭流
try {
OutputStream outputStream = getContentResolver().openOutputStream(insertUri, "rw");
if (toBitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream)) {
Log.e("保存成功", "success");
} else {
Log.e("保存失败", "fail");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
上面方法二和方法三是java的写法,kotlin写法点击直达:kotlin保存图片片到相册方法