且不会报:Permission Denial: not allowed to send broadcast
代码如下,拷贝到你工具类中
/**
* 保存图片到相册
*/
public static void saveImageToGallery(Bitmap bitmap,Context context) {
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
showToast( "sdcard未使用");
return;
}
// 首先保存图片
String fileName = System.currentTimeMillis() + ".jpg";
//定义图片地址
String ALBUM_PATH=Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Pictures";
File file = new File(ALBUM_PATH, fileName);
//文件是否存在
if (!file.getParentFile().exists()) {
file.mkdirs();
}
try {
FileOutputStream fos = new FileOutputStream(file);
// 格式为 JPEG,照相机拍出的图片为JPEG格式的,PNG格式的不能显示在相册中
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
} catch (IOException e) {
e.printStackTrace();
return;
}
//回收bitmap
if(!bitmap.isRecycled()){
bitmap.recycle();
}
// 其次把文件插入到系统图库,这种写法代替MediaStore.Images.Media.insertImage()来实现相册只出现一张图片.两张图片的原因:一个是自己保存的,另外一个时系统生产的缩略图
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
// 最后通知图库更新,4.4版本以上使用ACTION_MEDIA_SCANNER_SCAN_FILE,否则使用ACTION_MEDIA_MOUNTED时会报:Permission Denial: not allowed to send broadcast
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + ALBUM_PATH)));
showSuccessToast("已成功保存到相册");
}