Jetpack Compose: после того, как вы сделали снимок и нажали кнопку «Назад», пользователи не могут снова нажать «Сделать Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Jetpack Compose: после того, как вы сделали снимок и нажали кнопку «Назад», пользователи не могут снова нажать «Сделать

Сообщение Anonymous »

Я использую Jetpack Compose, и у меня есть модальный нижний лист, на котором пользователи могут нажать «Сделать снимок», когда нижний лист появится. Затем они попадают в вид с камеры и, сделав снимок, нажимают «ОК», и снимок будет загружен на сервер. Пока все хорошо.
Проблема здесь возникает, когда пользователь находится в режиме просмотра камеры (где он может либо нажать «ОК», чтобы отправить сделанный снимок, либо отменить его) и нажимает на аппаратное обеспечение. кнопку «Назад» или кнопку «Отмена». В этом случае вид с камеры закрывается, и когда они снова нажимают «Сделать снимок», ничего не происходит.
У меня есть такой код:

Код: Выделить всё

@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
)
}
}
После щелчка назад, когда они находятся в поле зрения камеры, во время отладки я устанавливаю точку останова в строке с if (shouldShowCameraView) { и вижу, что mustShowCameraView$delegate истинно, но функция ShowCamera() никогда не вызывается.
Есть ли что-то, что мне здесь не хватает? Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/786 ... t-click-on
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»