Привет! Возьмите свой кофе ☕️ и давайте внедрим CameraX с помощью Jetpack Compose.
Зависимости
Откройте :app/build.gradle.kts
и добавьте зависимости CameraX и Разрешения концертмейстера.
dependencies { // CameraX val cameraxVersion = "1.3.0-beta01" implementation("androidx.camera:camera-camera2:$cameraxVersion") implementation("androidx.camera:camera-lifecycle:$cameraxVersion") implementation("androidx.camera:camera-view:$cameraxVersion") // Permissions implementation("com.google.accompanist:accompanist-permissions:0.31.3-beta") // Icons implementation("androidx.compose.material:material-icons-extended:1.4.3") }
Управление разрешениями
Во-первых, давайте объявим их в AndroidManifest.xml
.
<manifest> <!-- Add the permissions --> <uses-feature android:name="android.hardware.camera.any" /> <uses-permission android:name="android.permission.CAMERA" /> <application>...</application> </manifest>
Теперь мы можем перейти к MainActivity.kt
и обработать разрешения. Давайте начнем с создания переменной с именем cameraPermissions
, которая будет обрабатывать необходимые разрешения для использования приложения.
val cameraPermission = rememberPermissionState( permissions = listOf( android.Manifest.permission.CAMERA ) )
Теперь давайте проверим, есть ли у пользователя все предоставленные разрешения, и если нет, мы предложим ему экран, который предложит ему предоставить разрешения на использование приложения.
if (!cameraPermission.status.isGranted) { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Text(text = "This permission is needed for this application") Button( onClick = { cameraPermissions.launchPermissionRequest() } ) { Text(text = "Grant") } } } else { // ... }
В блоке else у нас будет предварительный просмотр камеры и плавающая кнопка действия, которая сделает снимок.
Scaffold( modifier = Modifier.fillMaxSize(), floatingActionButton = {…