保存图片到相册
/**
* 保存图片到相册(适配安卓11)
*/
fun saveBitmapPhoto(bm: Bitmap) {
val resolver = AppUtils.getApplication().contentResolver
val contentValues = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, "自定义名称_${System.currentTimeMillis()}")
put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg")
}
val uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
if (uri != null) {
resolver.openOutputStream(uri).use {
bm.compress(Bitmap.CompressFormat.JPEG, 100, it)
ToastUtils.showShortToast("保存成功")
}
}
}
/**
* 保存图片到相册(以前的方式)
*/
fun saveBitmapPhoto(bm: Bitmap) {
//创建的路径
val externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
val mImageFile = File(externalStoragePublicDirectory, "抖查查/" + UUID.randomUUID() + ".jpg")
//创建目录文件
FileUtils.createOrExistsFile(mImageFile)
// 首先保存图片
try {
val fos = FileOutputStream(mImageFile)
//通过io流的方式来压缩保存图片
val isSuccess = bm.compress(Bitmap.CompressFormat.JPEG, 100, fos)
fos.flush()
fos.close()
//保存图片后发送广播通知更新数据库(某些手机不起作用)
val uri: Uri = Uri.fromFile(mImageFile)
AppUtils.getApplication().sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri))
//使用此方法
scanSingleFile(mImageFile)
ToastUtils.showShortToast("保存成功")
} catch (e: IOException) {
e.printStackTrace()
}
}
/**
* 刷新SD卡(用于刷新保存图片的地址)
*/
private fun scanSingleFile(filePath: File) {
MediaScannerConnection.scanFile(AppUtils.getApplication(), arrayOf(filePath.toString()), null) { path, uri ->
val cr = AppUtils.getApplication().contentResolver
var datemodified: Long = 0
var dateadded: Long = 0
val cursor = cr.query(uri, null, null, null, null)
if (cursor != null && cursor.moveToFirst()) {
datemodified = cursor.getLong(
cursor
.getColumnIndex(MediaStore.MediaColumns.DATE_MODIFIED)
)
dateadded = cursor.getLong(
cursor
.getColumnIndex(MediaStore.MediaColumns.DATE_ADDED)
)
cursor.close()
}
val values = ContentValues()
if (datemodified > 0
&& datemodified.toString().length > 10
) {
values.put(
MediaStore.MediaColumns.DATE_MODIFIED,
datemodified / 1000
)
}
if (dateadded > 0
&& dateadded.toString().length > 13
) {
values.put(
MediaStore.MediaColumns.DATE_ADDED,
dateadded / 1000
)
}
if (values.size() > 0) {
cr.update(uri, values, null, null)
}
}
}