getExternalStoragePublicDirectory(字符串类型)已被弃用,如果面向Android Q的应用程序不提供对公共外部存储的访问。作为替代文档,建议使用MediaStore。
对于Android,Q图像可以保存到单独的文件夹“ Custom_Directory”中,该文件夹通过以下方式在MediaStore.Images.Media.RELATIVE_PATH中定义:
val values = ContentValues().apply {
put(MediaStore.Images.Media.DISPLAY_NAME, "name")
put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis())
put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis())
put(MediaStore.Images.Media.RELATIVE_PATH, "${Environment.DIRECTORY_PICTURES}/Custom_Directory/")
put(MediaStore.Images.Media.IS_PENDING, 1)
}
val externalUri = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
val imageUri = context.contentResolver.insert(externalUri, values)
if (imageUri != null) {
context.contentResolver.openOutputStream(imageUri).use { out ->
bitmap?.compress(Bitmap.CompressFormat.JPEG, 100, out)
}
values.clear()
values.put(MediaStore.Images.Media.IS_PENDING, 0)
context.contentResolver.update(imageUri, values, null, null)
}
不幸的是,此代码需要API Build.VERSION_CODES.Q,因为MediaStore.Images.Media.RELATIVE_PATH仅适用于Android Q及更高版本。对于SDK级别低于Q的设备,可以通过另一种方式将图像保存到Pictures目录中。
val values = ContentValues().apply {
put(MediaStore.Images.Media.DISPLAY_NAME, "name")
put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis())
}
val externalUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
val imageUri = context.contentResolver.insert(externalUri, values)
if (imageUri != null) {
context.contentResolver.openOutputStream(imageUri).use { out ->
bitmap?.compress(Bitmap.CompressFormat.JPEG, 100, out)
}
但是我没有设法找到一种在画廊中创建单独文件夹的方法。同样,不能使用getExternalStoragePublicDirectory(String type)。
感谢您的想法。如果我走错了方向,请指正我。预先感谢!