以下是一个示例代码,演示了如何在Android Kotlin中保存图片到目录:
import android.content.ContentResolver
import android.content.ContentValues
import android.content.Context
import android.graphics.Bitmap
import android.os.Build
import android.os.Environment
import android.provider.MediaStore
import java.io.File
import java.io.FileOutputStream
import java.io.OutputStream
// 保存图片到相册
fun saveImageToGallery(context: Context, bitmap: Bitmap): Boolean {
// 获取保存路径
val savePath = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val contentValues = ContentValues().apply {
put(MediaStore.Images.Media.DISPLAY_NAME, "Image_${System.currentTimeMillis()}.jpg")
put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES)
}
val contentResolver: ContentResolver = context.contentResolver
val uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
uri?.let {
val outputStream: OutputStream = contentResolver.openOutputStream(it) ?: return false
outputStream.use { stream ->
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream)
}
return true
}
false
} else {
val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
if (!dir.exists()) {
dir.mkdirs()
}
val file = File(dir, "Image_${System.currentTimeMillis()}.jpg")
val outputStream = FileOutputStream(file)
outputStream.use { stream ->
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream)
}
return true
}
}
在上面的代码中,saveImageToGallery
函数接受一个Context
对象和一个Bitmap
对象作为参数。首先,它检查设备的Android版本,如果是Android Q及以上,则使用ContentResolver
将图片保存到相册。否则,它将使用FileOutputStream
将图片保存到外部存储器的图片目录下。
请注意,如果您的应用程序在Android Q及以上的版本中运行,您需要在AndroidManifest.xml
文件中添加以下权限:
此权限允许您的应用程序写入外部存储器。请注意,从Android R(API级别30)开始,这个权限默认为false
,您还需要在代码中请求运行时权限。