CameraX ProcessCameraProvider 与 CameraController - 何时使用哪一个?

Myr*_*lav 3 androidx android-camerax

有人可以澄清一下,我应该何时使用androidx.camera.view.CameraController以及何时使用androidx.camera.lifecycle.ProcessCameraProvider?两者似乎都能够使用生命周期事件启动/停止相机,处理不同的用例(预览、拍照、图像分析)。两者都可以与androidx.camera.lifecycle.PreviewView.

Hus*_*eem 6

ProcessCameraProvider是 CameraX 生命周期工件的一部分。它提供对部分/所有设备相机的访问,允许将相机的生命周期(当它打开/关闭时)附加到lifecycleOwner,并且具有应用程序进程的范围(它是单例)。就其使用方式而言,它是 CameraX 中的低级 API,从某种意义上说,当您使用它时,您需要初始化它,创建和配置您的用例(即 、 、PreviewImageAnalysisImageCapture将它们绑定到a LifecycleOwner,然后如果您愿意,可以通过访问绑定的相机CameraInfoCameraControl实例来与相机进行交互。是的,您可以PreviewView在这种情况下使用,尽管您必须手动将其附加到Preview用例中。

CameraController是 CameraX 视图工件的一部分,它构建在 CameraX 提供的核心 API 之上,提供一个简单的 API,可以轻松插入应用程序并准备使用。CameraX 的视图工件主要提供PreviewViewCameraController,后者处理所有相机设置,如果您使用了ProcessCameraProvider. 此外,CameraController处理设备旋转(以确保其用例以正确的方向接收来自相机的帧),并提供所见即所得的体验,确保其用例的输出与显示内容匹配PreviewView,并处理触摸事件(点击到)焦点、捏合缩放)在其附加的PreviewView. 您可以查看这篇文章,了解它提供的开箱即用的内容。

您选择使用哪个 API 取决于您的使用需求,CameraController为您提供/处理许多 CameraX 的核心功能,但在用例配置方面不太灵活。因此,如果您需要对用例进行更高级的控制(例如设置其分辨率),您可能必须使用ProcessCameraProvider.