Как сделать фото и сохранить в галереи используя новый API ActivityResultContracts
Хочу сделать фото причем чтоб оно сохранилось в галереи, а я получил uri
val cameraLauncher =
rememberLauncherForActivityResult(
contract = ActivityResultContracts.TakePicture()
) { isOK -> ...}
cameraLauncher.launch(file.toUri())
Проблема в том что Я могу, сохранить только в песочнице приложения используя androidx.core.content.FileProvider, но мне нужно, чтоб сделаное фото, было потом доступно в галлереи,
Ответы (1 шт):
Автор решения: WiMank
→ Ссылка
Один из вариантов:
fun addImageToGallery(filePath: String) {
val uri =
contentResolver.insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
createContentValues()
)
if (uri != null) {
FileInputStream(filePath).use { input ->
contentResolver.openOutputStream(uri).use { output ->
val buffer = ByteArray(BUFFER_SIZE)
while (true) {
val numBytesRead = input.read(buffer)
if (numBytesRead <= 0) {
break
}
output?.write(buffer, 0, numBytesRead)
}
}
}
}
}
private fun createContentValues(): ContentValues {
return ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, "image")
put(MediaStore.MediaColumns.MIME_TYPE, IMAGE_JPEG)
}
}
Передаем в качестве аргумента path нашего файла в addImageToGallery, contentResolver вернет нам uri, по полученному uri записываем файл.
Для android API < 29 нужно запрашивать разрешение на WRITE_EXTERNAL_STORAGE.