package com.sw.inbound.utils import android.net.Uri import androidx.activity.ComponentActivity import androidx.camera.core.CameraSelector import androidx.camera.view.CameraController import androidx.camera.view.LifecycleCameraController import androidx.camera.view.PreviewView class CameraUtils(private var activity: ComponentActivity) { private var cameraController: LifecycleCameraController? = null private var photoCaptureHelper: PhotoCaptureHelper? = null // private var isCameraReady = false fun takePhoto(successCallback: (Uri) -> Unit) { cameraController?.let { if (photoCaptureHelper == null) { initCaptureHelper() } } photoCaptureHelper?.let { it.addSuccessCallback(successCallback) it.bindCameraCallback { bind() } it.takePhoto() } } private var failCallback: (() -> Unit)? = null fun addFailCallback(callback: () -> Unit) { failCallback = callback } private fun initCaptureHelper() { photoCaptureHelper = PhotoCaptureHelper( context = activity, cameraController = cameraController!!, onError = { msg -> //toast(msg) failCallback?.invoke() } ) } fun setPreviewController(previewView: PreviewView?) { if (previewView?.controller == null) { previewView?.controller = cameraController } } fun initCamera() { if (cameraController == null) { cameraController = LifecycleCameraController(activity).apply { // 必须设置有效的用例 setEnabledUseCases( CameraController.IMAGE_CAPTURE // or CameraController.VIDEO_CAPTURE ) cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA } bind() } // if (isCameraReady.not()) { // try { // cameraController!!.initializationFuture.addListener({ // isCameraReady = true // Timber.d("Camera initialized successfully") // }, ContextCompat.getMainExecutor(this)) // } catch (e: Exception) { // Timber.d("Camera initialized error = ${e.message}") // } // } } fun bind() { try { cameraController?.bindToLifecycle(activity) } catch (e: Exception) { e.printStackTrace() } } fun unbind() { try { cameraController?.unbind() } catch (e: Exception) { e.printStackTrace() } } }