Проблема здесь возникает, когда пользователь находится в режиме просмотра камеры (где он может либо нажать «ОК», чтобы отправить сделанный снимок, либо отменить его) и нажимает на аппаратное обеспечение. кнопку «Назад» или кнопку «Отмена». В этом случае вид с камеры закрывается, и когда они снова нажимают «Сделать снимок», ничего не происходит.
У меня есть такой код:
Код: Выделить всё
@Composable
fun AppModalBottomSheet(
onShowBottomSheetChanged: (Boolean) -> Unit,
onPictureTaken: (File, Long) -> Unit,
onError: () -> Unit
) {
var shouldShowCameraView by remember { mutableStateOf(false) }
if (shouldShowCameraView) {
ShowCamera(onPictureTaken, onError)
}
}
@Composable
private fun ShowCamera(
onPictureTaken: (file: File, fileSize: Long) -> Unit,
onError: () -> Unit,
) {
val context = LocalContext.current
val imageFile = remember { createImageFile(context) }
val file = imageFile.getOrElse { onError.invoke() } as? File
val fileUri = file?.let { FileUtils.uri(context, file) }
val cameraLauncher =
rememberLauncherForActivityResult(contract = ActivityResultContracts.TakePicture()) {
if (it) {
fileUri?.let { uri ->
val fileSize = FileUtils.fileSize(context, uri)
onPictureTaken(file, fileSize)
}
}
}
LaunchedEffect(key1 = Unit) {
cameraLauncher.launch(fileUri)
}
}
private fun createImageFile(context: Context): Result {
val timeStamp: String =
SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
val imageFileName = "JPEG_" + timeStamp + "_"
val storageDir: File? = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
return runCatching {
File.createTempFile(
imageFileName,
".jpeg",
storageDir
)
}
}
Есть ли что-то, что мне здесь не хватает? Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/786 ... t-click-on