95 lines
2.7 KiB
Kotlin
95 lines
2.7 KiB
Kotlin
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()
|
|
}
|
|
}
|
|
|
|
}
|