首页 > 解决方案 > takePicture 需要 CameraX (1.0.0-alpha06) 上的执行器

问题描述

从更新后

androidx.camera:camera-core:1.0.0-alpha03

androidx.camera:camera-core:1.0.0-alpha06

方法 setTargetAspectRatio(在 ImageCaptureConfig.Builder 中)和 takePicture(在 ImageCapture 中)的签名已更改。

Web 中的官方文档和信息没有显示如何使用新方法(如何指定执行程序)。

更新后损坏的代码:

...
val captureConfig = ImageCaptureConfig.Builder()
    .setTargetAspectRatioCustom(Rational(1, 1)) //this method changed
    .setFlashMode(flashMode)
    .setLensFacing(lensFacing)
    .build()

val capture = ImageCapture(captureConfig)

binding.takeAPhoto.setOnClickListener {
    ...
    val imageFile = createTempFile(System.currentTimeMillis().toString(), ".jpg")
    capture.takePicture(imageFile, object : ImageCapture.OnImageSavedListener { //this method also changed

        override fun onImageSaved(file: File) {
            ...
        }

        override fun onError(useCaseError: ImageCapture.UseCaseError, message: String, cause: Throwable?) {
            ...
        })
    }
}

有没有人有(或知道在哪里可以找到)如何使用新方法的示例?提前致谢

标签: androidandroidxandroid-camerax

解决方案


最近显然已经更新的官方 Google Codelabs 使用:Executors.newSingleThreadExecutor()

参考:https ://codelabs.developers.google.com/codelabs/camerax-getting-started/#4

编辑:由于@kos的回复对我来说也很有意义,所以我添加了这两个官方 Android 文档参考:

https://developer.android.com/reference/java/util/concurrent/Executors.html#newSingleThreadExecutor()

https://developer.android.com/reference/java/util/concurrent/Executors.html#newCachedThreadPool()

这样,本主题的每个读者都可以就执行者做出自己的决定。

进一步编辑:自 1.0.0-alpha07 以来,API 发生了重要变化,因此我研究了一些文档。有一个 GitHub 示例显示执行器检索,如下所示mainExecutor = ContextCompat.getMainExecutor(requireContext())来源

如果你们中的一些人已经实现了 CameraX 并且运行良好,我肯定会等待 Android发行说明所推荐的 beta 版本


推荐阅读