问题出现的原因可能是因为 CameraX 使用的是异步操作模式,而在使用 takePicture() 方法时需要等待其完成。解决方案可以是在调用 takePicture() 方法后,使用监听器接口在异步任务完成后执行操作。代码示例如下:
先设置 CameraX 的 ImageCapture:
val imageCapture = ImageCapture.Builder()
.setTargetRotation(Surface.ROTATION_0)
.build()
然后在拍照时使用 takePicture() 方法,并添加 OnImageSavedCallback 监听器:
imageCapture.takePicture(executor, object : ImageCapture.OnImageSavedCallback {
override fun onImageSaved(file: File) {
// 拍照完成后要执行的操作
}
override fun onError(useCaseError: ImageCapture.UseCaseError, message: String,
cause: Throwable?) {
// 拍照出错后要执行的操作
}
})
其中,executor 是用于安排异步任务的 Executor。可以使用默认的 executor 或者自定义 executor。例如:
private val executor = Executors.newSingleThreadExecutor()
这样可以保证在拍照完成后才执行后续操作,避免了耗时长的问题。