Камера закрывается в CameraX с помощью Jetpack Compose.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Камера закрывается в CameraX с помощью Jetpack Compose.

Сообщение Anonymous »

хотя я запускаю свое приложение на реальных телефонах, все в порядке, но в эмуляторе студии Android возникает эта ошибка:

Не удалось сделать снимок: камера закрыта p>

это мой код, странная вещь: когда я переключаю переднюю камеру, она работает хорошо, но когда я использую заднюю, она не работает.
Я использовал CameraX с библиотекой компоновки Jetpack и тестировал с помощью API 31 и 33
Я попробовал это без dissmis() в onClick, но все равно не работает.
Я хочу знать, неправильный ли мой код или у эмуляторов студии Android возникла проблема.
р>

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

@Composable
fun CameraScreen(changeImage: (Uri) -> Unit,onDismiss: () -> Unit) {

val context = LocalContext.current
val lifecycleOwner = androidx.lifecycle.compose.LocalLifecycleOwner.current

var preview by remember { mutableStateOf
(null) }
var imageCapture: ImageCapture? = null
var lensFacing by remember { mutableStateOf(CameraSelector.LENS_FACING_BACK) }
var zoomRatio by remember { mutableStateOf(1.0f) }
var camera by remember { mutableStateOf(null) }
var previewView by remember { mutableStateOf(PreviewView(context)) }

LaunchedEffect(lensFacing) {
val cameraProvider = context.getCameraProvider()
try {
cameraProvider.unbindAll()

preview = Preview.Builder().build().also {
it.setSurfaceProvider(previewView.surfaceProvider)
}

imageCapture = ImageCapture.Builder().build()

val cameraSelector = CameraSelector.Builder()
.requireLensFacing(lensFacing)
.build()

camera = cameraProvider.bindToLifecycle(
lifecycleOwner, cameraSelector, preview, imageCapture
)
} catch (exc: Exception) {
Log.e("Camera", "Use case binding failed", exc)
}
}

Box(modifier = Modifier.fillMaxSize()) {

AndroidView(

modifier = Modifier
.fillMaxSize()
.pointerInput(Unit) {
detectTransformGestures { _, _, zoom, _ ->
// Adjust zoom ratio based on the pinch gesture
val newZoom = max(
1f,
min(zoomRatio * zoom, 5f)
) // Assuming max zoom is 5x, adjust as needed
zoomRatio = newZoom
camera?.cameraControl?.setZoomRatio(newZoom)
}
},
factory = { ctx ->
PreviewView(ctx).also {
previewView = it
}
}
)

Row(
modifier = Modifier
.align(Alignment.BottomCenter)
.fillMaxWidth()
.padding(16.dp),
horizontalArrangement = Arrangement.SpaceEvenly
) {
// Button to switch camera
Button(onClick = {
lensFacing = if (lensFacing == CameraSelector.LENS_FACING_BACK)
CameraSelector.LENS_FACING_FRONT
else
CameraSelector.LENS_FACING_BACK
}) {
Text(text = "Switch Camera")
}
// Button to capture image
Button(onClick = {
val fileName = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(System.currentTimeMillis()) + ".jpg"
val photoFile = File(context.filesDir, fileName)
val outputOptions = ImageCapture.OutputFileOptions.Builder(photoFile).build()
imageCapture?.takePicture(
outputOptions,
ContextCompat.getMainExecutor(context),
object : ImageCapture.OnImageSavedCallback {
override fun onError(exc: ImageCaptureException) {
Log.e("Camera", "Photo capture failed: ${exc.message}", exc)
}

override fun onImageSaved(output: ImageCapture.OutputFileResults) {
val savedUri = Uri.fromFile(photoFile)
changeImage(savedUri)
Log.d("Camera", "Photo capture succeeded: $savedUri")
// Handle the saved image URI here
onDismiss()
}
}
)
}) {
Text("Capture")
}
}
}
}`


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

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

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

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

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

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

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