android - 如何在撰写中初始化相机
问题描述
我想通过撰写 androidView 获得相机视图,但以下代码似乎对我不起作用。
@Composable
fun CameraPreviewScreen() {
val lifecycleOwner = LifecycleOwnerAmbient.current
val context = ContextAmbient.current
val cameraProviderFuture = remember { ProcessCameraProvider.getInstance(context) }
val previewView = remember { PreviewView(context) }
AndroidView(viewBlock = { previewView }) {
cameraProviderFuture.addListener(Runnable {
val cameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().build()
preview.setSurfaceProvider(it.surfaceProvider)
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
try {
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner, cameraSelector, preview)
} catch(exc: Exception) {
Log.e(TAG, "Use case binding failed", exc)
}
}, ContextCompat.getMainExecutor(context))
}
}
报告错误。
Permission Denial:不能使用相机
不能打开相机“0”没有相机权限(代码1)
解决方案
由于您的问题似乎与相机权限有关,您可以使用Accompanist库中的Permissions API向用户询问权限。
文档显示了一个带有相机的示例
@Composable
private fun FeatureThatRequiresCameraPermission(
navigateToSettingsScreen: () -> Unit
) {
// Track if the user doesn't want to see the rationale any more.
var doNotShowRationale by rememberSaveable { mutableStateOf(false) }
val cameraPermissionState = rememberPermissionState(android.Manifest.permission.CAMERA)
PermissionRequired(
permissionState = cameraPermissionState,
permissionNotGrantedContent = {
if (doNotShowRationale) {
Text("Feature not available")
} else {
Column {
Text("The camera is important for this app. Please grant the permission.")
Spacer(modifier = Modifier.height(8.dp))
Row {
Button(onClick = { cameraPermissionState.launchPermissionRequest() }) {
Text("Ok!")
}
Spacer(Modifier.width(8.dp))
Button(onClick = { doNotShowRationale = true }) {
Text("Nope")
}
}
}
}
},
permissionNotAvailableContent = {
Column {
Text(
"Camera permission denied. See this FAQ with information about why we " +
"need this permission. Please, grant us access on the Settings screen."
)
Spacer(modifier = Modifier.height(8.dp))
Button(onClick = navigateToSettingsScreen) {
Text("Open Settings")
}
}
}
) {
Text("Camera permission Granted")
}
}
推荐阅读
- javascript - 第二卷滑块,HTML 集合与节点列表
- google-apps-script - 谷歌应用脚本电子表格和 Bigquery 查询
- wordpress - 如何使 wordpress 管理屏幕字段成为必需
- javascript - 使用 Flatpickr 在结果中将当前日期设置为“今天”
- javascript - 自动完成如何在建议中写粗体字母
- twitter - Apache Flink:未触发流加入窗口
- c++ - 访问向量迭代器元素以输出
- kotlin - Ktor Netty 服务器发送空响应
- ios - 在 VoiceOver 开启时,在带有按钮的堆栈视图中设置不同的行为
- firebase - Firebase 数据库规则权限被拒绝但模拟工作