在gradle中引入依赖
// CameraX核心库
implementation("androidx.camera:camera-core:1.0.1")
// CameraX视图库
implementation("androidx.camera:camera-camera2:1.0.1")
// CameraX生命周期库
implementation("androidx.camera:camera-lifecycle:1.0.1")
// CameraX扩展库,用于支持预览和分析
implementation("androidx.camera:camera-view:1.0.0-alpha28")
获取相机权限
private fun checkCameraPermission() {
if (allPermissionsGranted()){
LogUtil.e(TAG, "allPermissionsGranted=====>")
initCamera()
}else{
LogUtil.e(TAG, "请求权限=====>")
// 权限未被授予,请求权限
ActivityCompat.requestPermissions(
this, permissionArray, PackageManager.PERMISSION_GRANTED
)
}
}
摄像头初始化
private fun initCamera(){
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
cameraProvider = cameraProviderFuture.get()
bindCameraUseCases()
}, ContextCompat.getMainExecutor(this))
}
val cameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK) // 后置摄像头
.build()
preview = Preview.Builder()
.setTargetRotation(ROTATION_90) // 解决了变形问题
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.build()
//拍照
imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.setTargetRotation(ROTATION_90)
.build()
//解绑用例
cameraProvider.unbindAll()
// 创建 ImageAnalysis 用于分析每一帧
imageAnalysis = ImageAnalysis.Builder()
.setTargetRotation(ROTATION_90)
.setTargetResolution(Size(1280,720))
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) // 只保留最新的帧,丢弃旧的帧。
.setImageQueueDepth(10) // 设置图像队列的深度(缓冲区大小)
.build()
imageAnalysis?.setAnalyzer(ContextCompat.getMainExecutor(this), faceAnalyzer)
cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageAnalysis)
//开始预览 previewView
preview.setSurfaceProvider(binding.previewView.surfaceProvider)
这是在使用cameraX相机功能的一点总结,与诸位共勉!!!如果能帮到你,动动你发财的手指点个赞吧!