fun saveToPicDir(context: Context, bitmap: Bitmap): String {
var result = ""
val imageFileType = when (bitmap.hasAlpha()) {
true -> "png"
false -> "jpeg"
}
val bitmapFormat = when (bitmap.hasAlpha()) {
true -> Bitmap.CompressFormat.PNG
false -> Bitmap.CompressFormat.JPEG
}
val fileName =
"${System.currentTimeMillis()}.$imageFileType"
ContentValues().apply {
put(MediaStore.Images.Media.TITLE, fileName)
put(MediaStore.Images.Media.DISPLAY_NAME, fileName)
put(MediaStore.Images.Media.DESCRIPTION, "描述文件")
if (Build.VERSION.SDK_INT >= 29) {
put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/${MissBearConst.MB_DIR_SAVE}")
}
put(MediaStore.Images.Media.MIME_TYPE, "image/$imageFileType")
val uri =
context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, this)
var outputStream: OutputStream? = null
try {
outputStream = context.contentResolver.openOutputStream(uri!!)
bitmap.compress(bitmapFormat, 100, outputStream)
uri.path?.let { result = it }
} catch (e: java.lang.Exception) {
e.printStackTrace()
} finally {
outputStream?.let {
it.flush()
it.close()
}
}
if (Build.VERSION.SDK_INT >= 26) {
if (uri != null) {
sendBroadcastToPic(context, uri)
}
}
}
return result
}
/**
* 适配Android 8.0 出现保存之后不通知图库更新的问题
*/
private fun sendBroadcastToPic(context: Context, imageUri: Uri) {
var path = ""
val query = context.contentResolver.query(
imageUri,
arrayOf(MediaStore.Images.ImageColumns.DATA),
null,
null,
null
)
if (query == null) {
path = imageUri.path!!
} else {
query.moveToFirst()
val name: Int = query.getColumnIndex(MediaStore.Images.ImageColumns.DATA)
path = query.getString(name)
query.close()
}
MediaScannerConnection.scanFile(context, arrayOf(path), null, null);
}
可直接使用的Bitmap保存至手机图库(Kotlin 版)适配Android8.0
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- FileOutputStreamfile =new FileOutputStream("/mnt/sdcard/"...