Google 致力于为黑人社区推动种族平等。查看具体举措

CameraX

CameraX 是 Android Jetpack 中新增的一个库。利用该库,可以更轻松地向应用添加相机功能。该库提供了很多兼容性修复程序和解决方法,有助于在众多设备上打造一致的开发者体验。

如需了解如何在应用或库中使用 CameraX 库,请参阅 CameraX 概览

下面列出了 androidx.camera 组中的所有工件及其最新发布版本。 向代码中添加依赖项时,请以 androidx.camera:<artifact>:<version> 形式声明依赖项。

工件 当前稳定版 下一候选版本 Beta 版 Alpha 版
camera-camera2 - - 1.0.0-beta06 -
camera-core - - 1.0.0-beta06 -
camera-extensions - - - 1.0.0-alpha13
camera-lifecycle - - 1.0.0-beta06 -
camera-view - - - 1.0.0-alpha13
此库的最后更新时间:2020 年 6 月 24 日

设备测试

我们的实验室在很多设备上对 CameraX 进行了测试。如需查看实验室当前所用测试设备的列表,请参阅 CameraX 实验室测试设备

声明依赖项

如需添加 CameraX 的依赖项,您必须将 Google Maven 代码库添加到项目中。有关详情,请阅读 Google 的 Maven 代码库

在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

dependencies {
  // CameraX core library using the camera2 implementation
  def camerax_version = "1.0.0-beta06"
  // The following line is optional, as the core library is included indirectly by camera-camera2
  implementation "androidx.camera:camera-core:${camerax_version}"
  implementation "androidx.camera:camera-camera2:${camerax_version}"
  // If you want to additionally use the CameraX Lifecycle library
  implementation "androidx.camera:camera-lifecycle:${camerax_version}"
  // If you want to additionally use the CameraX View class
  implementation "androidx.camera:camera-view:1.0.0-alpha13"
  // If you want to additionally use the CameraX Extensions library
  implementation "androidx.camera:camera-extensions:1.0.0-alpha13"
}

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库的改进有自己的见解,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

Camera-Camera2 和 Camera-Core 版本 1.0.0

Camera-Camera2 版本 1.0.0-beta06

2020 年 6 月 24 日

发布了 androidx.camera:camera-camera2:1.0.0-beta06版本 1.0.0-beta06 中包含这些提交内容

API 变更

  • 添加了用于按相机 ID 和 CameraCharacteristics 过滤相机的实验性界面。(I28f61)

问题修复

  • 修复了 startFocusAndMetering 无法在 Samsung Galaxy S7 上成功聚焦的问题。(If3be7b/159039233
  • 修复了在退出应用后无法关闭相机的问题。(I7a7b3)
  • 修复了在使用 PreviewView 的 SurfaceView 实现时重复切换摄像头会导致预览中断的问题 (I920ce)
  • 如果没有任何指定的 MeteringPoint 可以生成有效的测光矩形,则 CameraControl#startFocusAndMetering 将失败。(Id53ce)

Camera-Core 版本 1.0.0-beta06

2020 年 6 月 24 日

发布了 androidx.camera:camera-core:1.0.0-beta06版本 1.0.0-beta06 中包含这些提交内容

API 变更

  • 添加了用于按相机 ID 和 CameraCharacteristics 过滤相机的实验性界面。(I28f61)

问题修复

  • 您现在可以在调用 ProcessCameraProvider#getInstance() 之前为 CameraX 配置 ProcessCameraProvider#configureInstance()。这样便可自定义 CameraXConfig,而无需在应用的 Application 类中实现 CameraXConfig.Provider。(Ia1a8d)
  • 如果没有任何指定的 MeteringPoint 可以生成有效的测光矩形,则 CameraControl#startFocusAndMetering 将失败。(Id53ce)

Camera-Camera2 版本 1.0.0-beta05

2020 年 6 月 10 日

发布了 androidx.camera:camera-camera2:1.0.0-beta05版本 1.0.0-beta05 中包含这些提交内容

问题修复

  • 修复了在手机处于“勿扰”模式时,初始化 CameraX 时应用启动崩溃的问题。InitializationException 包含 ListenableFuture,它会将初始化结果设为 CameraUnavailableException,而不是使应用崩溃。(I9909ab/149413835
  • 修复了在 CONTROL_AF_STATE 为 null 的设备上调用 startFocusAndMetering 时发生崩溃的问题。(Ife55eb/157084254

Camera-Core 版本 1.0.0-beta05

2020 年 6 月 10 日

发布了 androidx.camera:camera-core:1.0.0-beta05版本 1.0.0-beta05 中包含这些提交内容

API 变更

  • 修复了在手机处于“勿扰”模式时,初始化 CameraX 时应用启动崩溃的问题。InitializationException 包含 ListenableFuture,它会将初始化结果设为 CameraUnavailableException,而不是使应用崩溃。(I9909ab/149413835

问题修复

  • 更新了 setTargetResolutionsetTargetRotation 的 Javadoc。(Iae16f)

Camera-Camera2 版本 1.0.0-beta04

2020 年 5 月 27 日

发布了 androidx.camera:camera-camera2:1.0.0-beta04版本 1.0.0-beta04 中包含这些提交内容

问题修复

  • 允许应用通过 Camera2Interop 设置任何 camera2 捕获请求参数,而不会导致崩溃。请注意是否由于替换参数而出现问题。使用 Camera2Interop 替换参数时,无法保证稳定性和行为。(Ibe5a1b/149103700
  • 修复了在使用伪语言区域的设备上使用应用时出现的自动初始化问题。(I3bef3b/154767663
  • 已将与独立用例相关的错误日志转换为 Camera2CameraImpl 上的调试日志。(I1a565b/154422490
  • 修复了在使用闪光灯的情况下拍摄的图片有时仍然过暗的问题。(I5d9fab/149729613
  • 修复了 ImageProxy 中源于 ImageCapture 的缓冲区未倒回的错误(I0c455b/153249512
  • 修复了仅绑定 ImageCapture 时存在的以下问题:(1) 无法使用 MAX_QUALITY 拍摄照片;(2) 生成的图片质量不佳,因为自动曝光不起作用。(I17782b/145326998
  • 改进了当 CameraX 因其他进程或代码路径窃取相机而断开连接时,重新打开相机的可靠性(I1fbc3b/153714651

Camera-Core 版本 1.0.0-beta04

2020 年 5 月 27 日

发布了 androidx.camera:camera-core:1.0.0-beta04版本 1.0.0-beta04 中包含这些提交内容

API 变更

  • 添加了一个实验性 API CameraXConfig.Builder#setSchedulerHandler(),用于设置供 CameraX 相机堆栈内部使用的处理程序。此新 API 和 CameraXConfig.Builder#setCameraExecutor() 相配合,应该能让用户完全控制 CameraX 相机堆栈使用的线程。(I7bf32b/121160431

问题修复

  • 修复了在 ImageReaderProxy 关闭后访问 ImageProxy 时出现的 ImageAnalysis 崩溃问题。这也使得 Analyzer 接收的所有 ImageProxy 必须先关闭,然后 ImageReaderProxy 才会关闭。(I4b299b/145956416b/154155377b/156357269
  • PreviewView#createSurfaceProvider() 中移除了 CameraInfo 参数,PreviewView 现在会在内部从 SurfaceRequest 中检索该参数。(If18f0b/154652477
  • 修复了在使用伪语言区域的设备上使用应用时出现的自动初始化问题。(I3bef3b/154767663
  • 修复了在使用闪光灯的情况下拍摄的图片有时仍然过暗的问题。(I5d9fab/149729613
  • 修复了 ImageAnalysis 的以下问题:多次调用 setAnalyzer/clearAnalyzer 导致分析器无法接收要分析的图片。(I6169fb/151605317b/153514544
  • 修复了 ImageProxy 中源于 ImageCapture 的缓冲区未倒回的错误(I0c455b/153249512
  • 修复了 CameraManager 中受支持列表中的第一个相机有时无法选用的问题。(I4c624b/153418028
  • 修复了由于未释放先前请求的界面便设置 Preview.SurfaceProvider 而导致的间歇性崩溃问题。“java.lang.IllegalStateException: Camera surface session should only fail with request cancellation”I8e4e7b/155936225

Camera-Camera2 版本 1.0.0-beta03

2020 年 4 月 15 日

发布了 androidx.camera:camera-camera2:1.0.0-beta03版本 1.0.0-beta03 中包含这些提交内容

问题修复

  • 修复了 camera-core 的版本支持问题

Camera-Core 版本 1.0.0-beta03

2020 年 4 月 15 日

发布了 androidx.camera:camera-core:1.0.0-beta03版本 1.0.0-beta03 中包含这些提交内容

问题修复

  • 修复了 beta03 中的回归问题:即不使用 UseCase 调用 bindToLifecycle() 时可能导致抛出异常。这样一来,如果不绑定 UseCase,就会阻止检索 Camera

Camera-Camera2 版本 1.0.0-beta02

2020 年 4 月 1 日

发布了 androidx.camera:camera-camera2:1.0.0-beta02版本 1.0.0-beta02 中包含这些提交内容

问题修复

  • 修复了 ImageProxy 中由 ImageCapture 生成的 ImageInfo.getRotationDegrees(),以便匹配 EXIF 方向旋转值。(Id4281b/150802561
  • 使用 CameraX/Camera2 默认实现时,不需要再对 build.gradle 内的 CameraX 依赖项进行显式排序。对于需要声明严格的依赖项的情况,现在所有 CameraX 依赖项都可以包含在构建文件中。(I46e88)
  • 修复了屏幕尺寸小于 640x480 的设备上发生的 IllegalArgumentException 问题。(Ife3f2b/150506192
  • 修复了 bindToLifecycle,使其仅在成功绑定的情况下才会修改 UseCase。之前,在调用 bindToLifecycle 计算分辨率时,需要更新 UseCase。现在,无需再更新 UseCase 便可进行计算 (I78d9e)

Camera-Core 版本 1.0.0-beta02

2020 年 4 月 1 日

发布了 androidx.camera:camera-core:1.0.0-beta02版本 1.0.0-beta02 中包含这些提交内容

问题修复

  • 修复了 ImageProxy 中由 ImageCapture 生成的 ImageInfo.getRotationDegrees(),以便匹配 EXIF 方向旋转值。(Id4281b/150802561
  • 修复了 bindToLifecycle,使其仅在成功绑定的情况下才会修改 UseCase。之前,在调用 bindToLifecycle 计算分辨率时,需要更新 UseCase。现在,无需再更新 UseCase 便可进行计算 (I78d9e)
  • 修复了多次调用 Preview.setSurfaceProvider() 且 Preview Surface 发生变化后,Preview 用例的捕获会话不更新的问题。

Camera-Camera2 版本 1.0.0-beta01

2020 年 2 月 26 日

发布了 androidx.camera:camera-camera2:1.0.0-beta01版本 1.0.0-beta01 中包含这些提交内容

问题修复

  • SurfaceRequest.setSurface(Surface) 已重命名为 SurfaceRequest.provideSurface(Surface)SurfaceRequest.setWillNotComplete() 已重命名为 SurfaceRequest.willNotProvideSurface()。(I224fe)
  • 修复了使用 ImageCapture.setTargetRotation() 更改目标旋转值后,保存的图片宽高比不正确的问题。(I474eab/148763432
  • 通过保留可设置默认 CameraXConfig 提供程序的标记,修复了启用 ProGuard 的应用变体的初始化问题。(I2d6c1)

Camera-Core 版本 1.0.0-beta01

2020 年 2 月 26 日

发布了 androidx.camera:camera-core:1.0.0-beta01版本 1.0.0-beta01 中包含这些提交内容

API 变更

  • 使用 ExecutorCallback 替换了 SurfaceRequest.provideSurface() 上的 ListenableFuture。这简化了 API,因为无需再处理 provideSurface() 上的异常,并且强制要求不能取消 provideSurface() 回调。这是为了防止旧版设备因过早释放 Surface 导致崩溃的问题。SurfaceRequest.Result 对象现在用于跟踪 SurfaceRequest 如何使用所提供的 Surface。(I7854b)
  • SurfaceRequest.setSurface(Surface) 已重命名为 SurfaceRequest.provideSurface(Surface)SurfaceRequest.setWillNotComplete() 已重命名为 SurfaceRequest.willNotProvideSurface()。(I224fe)

问题修复

  • 修复了使用 ImageCapture.setTargetRotation() 更改目标旋转值后,保存的图片宽高比不正确的问题。(I474eab/148763432
  • 通过保留可设置默认 CameraXConfig 提供程序的标记,修复了启用 ProGuard 的应用变体的初始化问题。(I2d6c1)
  • 更新了关于 Flash 模式 API 的文档,添加了可能的值。(I4a3ec)

Camera-Camera2 版本 1.0.0-alpha10

2020 年 2 月 10 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha10版本 1.0.0-alpha10 中包含这些提交内容

问题修复

  • 确保仅在 Camera2 使用期间保留 Surface,提升了 INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY 设备稳定性。(I9dac2)
  • 通过正确调整 CONTROL_AE_TARGET_FPS_RANGE,修复了旧版设备上曝光不足的预览问题。(1224638)

Camera-Core 版本 1.0.0-alpha10

2020 年 2 月 10 日

发布了 androidx.camera:camera-core:1.0.0-alpha10版本 1.0.0-alpha10 中包含这些提交内容

API 变更

  • 更新了 ImageCapture,允许将图片保存到 UriOutputStream。将过载 takePicture 方法合并成了单个方法。更新了测试应用,以将 Uri 用作规范示例。(Ia3bec)
  • Preview.PreviewSurfaceProvider 已重命名为 Preview.SurfaceProvider。开发者使用 SurfaceProvider 时无需再创建自己的 ListenableFuture;现在可通过新的 SurfaceRequest 对象提供 Surface。移除了 Preview.getPreviewSurfaceProvider() 方法,因为在 PreviewPreviewView 等其他类结合使用时,此方法可能会被滥用。(I20105)
  • getTargetRotation()getTargetName() 添加到了 Preview 中。(Iceee7)
  • ImageAnalysis 中添加了 getTargetRotation()getBackpressureStrategy()getImageQueueDepth()。(I9d6d9)
  • ImageCapture() 中添加了 getTargetRotation()getCaptureMode() (I5bc17)
  • 之前在 ImageCapture.OnImageSavedCallback.onError()ImageCapture.OnImageCapturedCallback.onError() 中传递的参数现已替换为单个参数 ImageCaptureException,该参数仍然包含之前传递的所有信息。
  • 之前在 ImageCapture.OnImageSavedCallback.onImageSaved() 中传递的文件参数已移除。(I750d2)
  • PreviewImageCapture 类现已标记为最终类。(I2500b)
  • 更新了 API,CameraInfogetZoomRatio()getMaxZoomRatio()getMinZoomRatio()getLinearZoom() 方法合并到了 getZoomState()(会返回 ZoomState 实例)中。(Ib19fe)
  • CameraXConfig 中移除了 API 字段 OPTION_TARGET_CLASSOPTION_TARGET_NAME,因为这些字段仅供内部库使用。移除了 CameraXConfig.Builder 的构造函数。(I96912)
  • 不再要求应用必须扩展 Application 才能初始化 CameraX。现在,只要应用的 build.gradle 包含 camera-camera2 工件,系统就会使用默认的 Camera2 配置来初始化 CameraX。(I58ff5) (b/146923574)

Camera-Camera2 版本 1.0.0-alpha09

2020 年 1 月 22 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha09版本 1.0.0-alpha09 中包含这些提交内容

API 变更

  • 添加了 camera2 互操作路径,用于提取 Camera2 的相机 ID。您可以使用 Camera2CameraInfo.extractCameraId()CameraInfo 提取相机 ID。以下代码示例展示了如何使用此方法:

    Camera camera = provider.bindToLifecycle(...);
    String cameraId =
        Camera2CameraInfo.extractCameraId(camera.getCameraInfo());
    

    Camera2CameraInfo 类需要 ExperimentalCamera2Interop markerClass。

Camera-Core 版本 1.0.0-alpha09

2020 年 1 月 22 日

发布了 androidx.camera:camera-core:1.0.0-alpha09版本 1.0.0-alpha09 中包含这些提交内容

API 变更

  • SurfaceOrientedMeteringPointFactory 参数 useCaseForSurface 重命名为 useCaseForAspectRatio,并补充了参考文档的内容。
  • 以构造函数 FocusMeteringAction.Builder() 取代 FocusMeteringAction.Builder.from() 方法。
  • 移除了 DisplayOrientedMeteringPointFactory(android.content.Context, androidx.camera.core.CameraSelector, float, float)。应用应使用采用 Display 参数的构造函数并传入当前显示的内容。
  • Javadoc 改进了关于 MeteringMode 和 3A 标记的对焦和测光 API,以及对 Display 参数的使用。
  • 补充了 setZoomRatiosetLinearZoom 的参考文档的内容。

问题修复

  • 修复了关闭再打开相机会导致“前提条件”检查失败的问题。
  • 修复了在使用手电筒和缩放 API 时可能会发生的 ConcurrentModificationException
  • 修复了相关问题,现在当 mod16 尺寸可用时,可以选择与请求的分辨率更接近的分辨率。
  • 现在,startFocusMeteringcancelFocusMetering API 的行为方式与文档中记述的一样,时机设定正确,并可能会返回错误。
  • 修复了在设备上请求具有设备不支持的剪裁宽高比的特定目标分辨率时出现的问题。现在,会选择具有足够分辨率的非剪裁尺寸(如果有)来限制原始请求。

Camera-Camera2 版本 1.0.0-alpha08

2019 年 12 月 18 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha08版本 1.0.0-alpha08 中包含这些提交内容

已知问题

  • 在使用 Camera2 互操作时,并非所有 Camera2 捕获请求选项都可用。如果不支持请求的选项,会话将无法启动,并可能会出现如下错误:09-09 14:04:13.643 10117 26020 26036 E AndroidRuntime: java.lang.IllegalArgumentException: Unsupported session configuration combination

问题修复

  • 修复了旋转或切换 API 级别 21 和 22 的相机后出现黑屏预览的问题。

API 变更

  • 实验性变更:添加了 camera2 互操作路径,以用于提取相机 ID。

Camera-Core 版本 1.0.0-alpha08

2019 年 12 月 18 日

发布了 androidx.camera:camera-core:1.0.0-alpha08版本 1.0.0-alpha08 中包含这些提交内容

已知问题

  • 使用 PreviewViewCameraView 的应用的预览宽高比可能有误。在某些 FULL 设备(例如 Pixel2)上暂停或恢复操作后,会发生这种情况。

问题修复

  • 更新了 FocusMeteringActionCameraControl 的文档。
  • enableTorch()getTorchState() 实现了 TorchControl

API 变更

  • 隐藏了 IntDef 并从 IntDef 定义中移除了 IntDef 常量。
  • rotationDegrees 从类 OnImageCaptureCallback 移到了 ImageInfo 中。
  • rotationDegrees 从类 Analyzer 移到了 ImageInfo 中。

Camera-Camera2 版本 1.0.0-alpha07

2019 年 12 月 4 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha07camera-camera2 的版本 1.0.0-alpha07 中包含这些提交内容

  • Camera2Config 现在可用于为 CameraX 初始化和配置基于 Camera2 的实现。如需详细了解如何将此方法用于初始化,请参阅版本说明中的 camera-core 部分
  • 就功能而言,现在已将 camera2 互操作标记为实验性,并已将其移至单独的软件包 androidx.camera.camera2.interop.

Camera-Core 版本 1.0.0-alpha07

2019 年 12 月 4 日

发布了 androidx.camera:camera-core:1.0.0-alpha07camera-core 的版本 1.0.0-alpha07 中包含这些提交内容

请注意,我们在准备 Beta 版时,对此 Alpha 版本进行了一些重大更改。请您查看这些更改,并在 CameraX Google 网上论坛上分享您的反馈意见。对于在 Play 商店上的应用中使用 CameraX 的开发者,建议您等到正式 Beta 版推出后再升级应用中的库。

API 变更

  • 重要提示:CameraX 初始化已更改。应用应实现 CameraXConfig.Provider,并使用 androidx.camera.camera2 提供的默认 Camera2Config。典型用法如下:

    import androidx.camera.camera2.Camera2Config
    import androidx.camera.core.CameraXConfig
    
    public class MyCameraXApplication : Application(),  CameraXConfig.Provider {
        override fun getCameraXConfig(): CameraXConfig {
                return Camera2Config.defaultConfig(this)
        }
    }
    
  • 已移除 CameraX 类。现在,可以通过 ProcessCameraProvider 使用之前由 CameraX 类调用提供的 bindToLifecycle()unbind()unbindAll()isBound()hasCamera()

  • 可使用静态方法 ProcessCameraProvider.getInstance() 异步获取每个进程的 ProcessCameraProvider 实例,该方法会返回 ListenableFuture,从而在完成时提供 ProcessCameraProvider。 下面在 onCreate() 中展示它的典型用法。您可以在 Activity 生命周期的后期调用 getInstance(),以便将初始化延迟时间推迟到更晚的时间(例如,当用户操作打开相机界面时)。

    import androidx.camera.lifecycle.ProcessCameraProvider
    import com.google.common.util.concurrent.ListenableFuture
    
    class MainActivity : AppCompatActivity() {
       private lateinit var cameraProviderFuture : ListenableFuture<ProcessCameraProvider>
       override fun onCreate(savedInstanceState: Bundle?) {
           cameraProviderFuture = ProcessCameraProvider.getInstance(this);
      }
    
  • 您可以在 getInstance() 返回的 ListenableFuture 中添加监听器。这样可以确保能够从 Future 检索相机提供器,而不会阻塞 Future.get()

    cameraProviderFuture.addListener(Runnable {
      val cameraProvider = cameraProviderFuture.get()
      cameraProvider.bindToLifecycle(...)
    }, ContextCompat.getMainExecutor(this))
    
  • 现在会通过相机选择器(而不是根据用例)来选择相机

    val cameraSelector = CameraSelector.Builder().requireLensFacing(LensFacing.BACK).build()
    
  • CameraProvider.bindToLifecycle 指定生命周期所有者、相机选择器和用例,随后这些指定的内容会绑定到指定的生命周期所有者并针对所选的相机运行。

    cameraProvider.bindToLifecycle(this as LifecycleOwner,
           cameraSelector, preview, imageAnalysis)
    
  • 移除了用例的“Config”类。现在会直接构建用例,并在每个用例构建器上设置选项。例如:

    preview = Preview.Builder().setTargetAspectRatio(AspectRatio.RATIO_16_9).build()
    
  • 更新了预览用例,以接受由应用创建和管理的 Surface,从而确保 Android 的最佳运行效果。强烈建议您使用 camera-view 软件包中提供的 PreviewView 视图类。

    preview.setPreviewSurfaceProvider(previewView.previewSurfaceProvider)
    
  • 请参阅有关如何附加由应用管理的 Surface 的说明文档。在这些情况下,应用会管理 Surface 的生命周期。

  • 重要提示ImageAnalysis Analyzer 方法实现必须在使用完收到的图像后对其调用 image.close()。否则,可能会导致无法接收新图像或者相机卡顿(具体取决于 Backpressure 设置)。如需了解详情,请参阅参考文档

  • 现在将 ImageAnalysis ImageReaderMode 改成了 Backpressure 策略 intdef

  • 已将 ImageProxy.getImage() 标记为实验性。应用应对使用情况进行注释,例如通过 @androidx.camera.core.ExperimentalGetImage 进行注释

  • 移除了针对 AnalyzerUIThread 注释要求。

  • 添加了 ImageAnalysis.clearAnalyzer() 函数以用于移除分析器。

  • 已将具有多个方法的监听器重命名为 Callback:

    • ImageCapture.OnImageCapturedListener 现在为 ImageCapture.OnImageCapturedCallback
    • ImageCapture.OnImageSavedListener 现在为 ImageCapture.OnImageSavedCallback
    • VideoCapture.OnVideoSavedListener 现在为 VideoCapture.OnVideoSavedCallback
  • 已将枚举更改为 IntDef

  • 添加了缩放控件:

    • CameraControl.setLinearZoom()
    • CameraControl.setZoomRatio()
    • CameraInfo.getLinearZoom()
    • CameraInfo.getMaxZoomRatio()
    • CameraInfo.getZoomRatio()
  • 添加了 CameraInfo.hasFlashUnit() 以确定是否存在闪光灯/手电筒硬件。

  • 移除了 CameraInfo.isFlashAvailable()。手电筒替代了闪光灯功能。如需了解详细信息,请参阅参考文档

  • get/set/is 访问函数取代了 ImageCapture.Metadata 字段。

  • startFocusMeteringcancelFocusMetering 现在会返回代表调用的异步操作的 ListenableFutures

  • MeteringPoints 现在充当测光操作的手柄,由工厂生成。应用应使用现有工厂而不是自定义工厂。

修复的问题

  • 修复了在恢复操作后无法拍照的问题(上一次暂停时有拍照操作尚未完成)。
  • 已知问题:CameraControl.enableTorch() 可正常工作,但返回的 ListenableFuture<Void> 始终是当前的 complete(success) future,即使没有闪光灯元件也是如此。未来的版本会将此问题修正为最终行为:如果没有闪光灯元件,enableTorch(true) 会立即失败(不会向 CaptureSession 发送请求),并且 TorchState 将保持关闭状态。
  • 已知问题:startFocusAndMeteringcancelFocusAndMetering 可启动和取消对焦测光,但会返回不代表文档所记述行为的当前 completed (success) future。从 ListenableFuture<FocusMeteringResult> CameraControl.startFocusAndMetering() 返回的 FocusMeteringResult 是虚假结果,isFocusSuccessful() 始终为“false”,这与预期的文档记述行为不同。
  • 已知问题:正在开发用于 PreviewView 触摸事件的测光点工厂。目前,连接自定义托管 Surface 的应用可以使用现有的测光点工厂,在其他情况下则无法将触摸对焦功能用于 PreviewView

Camera-Camera2 和 Camera-Core 版本 1.0.0-alpha06

2019 年 10 月 9 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha06androidx.camera:camera-core:1.0.0-alpha06。前者是 camera-camera2:1.0.0-alpha06 中包含的提交内容,后者是 camera-core:1.0.0-alpha06 中包含的提交内容

新功能

宽高比设置方面的变更:

  • 添加了 setTargetAspectRatioMode() 并接受枚举参数。这表示应用会使用 RATIO_4_3RATIO_16_9 选项(而不是任意宽高比)来设置宽高比模式。这进一步反映了一个事实,即相机仅提供特定的宽高比,而不是任意宽高比。
    • 目前,唯一可用的宽高比为 16:9 和 4:3。1:1 的宽高比只有某些设备上的相机可以支持,而且只能在限定的分辨率下使用。设计 1:1 界面或处理选项的应用应使用更灵活的 16:9 或 4:3 选项,并剪裁显示画面或处理子区域。
    • 这些宽高比旨在最大限度地利用传感器区域。
  • getTargetAspectRatio() 添加到了用例配置 API 中,返回用例输出的目标宽高比。
  • 方法 setTargetAspectRatio(Rational aspectRatio) 已针对 ImageCapture 更改为 setTargetAspectRatioCustom(Rational aspectRatio)。设置后,ImageCapture 输出会被剪裁成相应的宽高比。

执行器 API

  • 以下函数接受执行器参数,该参数允许应用控制函数在哪个执行器上运行。
    • Preview.setOnPreviewOutputUpdateListener() API。如果该函数没有执行器,它将在主线程上执行。
    • Preview.setOnPreviewOutputUpdateListener
    • FocusMeteringAction.Builder.setAutoFocusCallback
    • ImageAnalysis.setAnalyzer
    • ImageCapture.takePicture
    • CameraView.takePicture
    • CameraView.startRecording
    • VideoCapture.startRecording

添加了 CameraInfo,并检查了闪光灯可用情况和传感器旋转 API

  • 添加了 CameraInfogetCameraInfo 方法,以允许应用检查是否有朝向 CameraInfo 的镜头以及相机上是否有闪光灯。例如:

    try {
        CameraInfo cameraInfo = CameraX.getCameraInfo(currentCameraLensFacing);
        LiveData<Boolean> isFlashAvailable = cameraInfo.isFlashAvailable();
        flashToggle.setVisibility(isFlashAvailable.getValue() ? View.VISIBLE : View.INVISIBLE);
    } catch (CameraInfoUnavailableException e) {
        Log.w(TAG, "Cannot get flash available information", e);
        flashToggle.setVisibility(View.VISIBLE);
    }
    
  • 添加了 CameraInfo.getSensorRotationDegrees()。它提供相对于设备自然屏幕方向的相机传感器方向,或者为了方便起见,提供相对于 Surface 旋转所述方向(即相对于自然屏幕方向的方向)的相机传感器方向。

API 变更和问题修复

  • 宽高比:对于每个用例,应用应仅调用 setTargetResolution()setTargetAspectRatio() 中的一个。在同一构建器上同时调用两者会返回错误。
    • 通常,我们建议根据应用的界面设计来使用 setTargetAspectRatio()。具体的分辨率取决于用例。例如,预览图像接近于屏幕的分辨率,而图像捕获会提供高分辨率的静态图像。如需了解详情,请参阅自动分辨率表格
    • 对于更具体的情况,例如需要最小分辨率(以减少运算量)或最大分辨率(以处理细节)时,请使用 setTargetResolution()
  • 执行器 API:从用例配置 API 中删除了 setCallbackHandler() 调用。相反,应用可以将执行器设置为各种其他设置回调的 API 中的参数。
  • 更新了各种函数的 null 注释。
  • 修复了打开相机时导致抛出 java.lang.IllegalStateException at Camera$StateCallback.onError 的问题。
  • 修复了以下问题:当应用请求较大或默认分辨率时选择的分辨率太小(低于 640x480),导致预览图像非常模糊或出现块状像素。专门需要较小分辨率的应用可明确请求这些分辨率。
  • 修复了从启动另一相机应用的 Intent 返回后相机显示黑屏(无法启动相机)的问题。
  • 修复了反复启动或停止应用时抛出以下错误的问题;java.lang.IllegalArgumentException: CaptureRequest contains unconfigured Input/Output Surface!
  • 修复了停用 ImageAnalysis 时发生的以下错误:java.lang.IllegalStateException: maxImages (4) has already been acquired, call #close before acquiring more.
  • 添加了针对相机断开流程的其他测试。
  • 提高了测试系统在运行等效性相机测试时的稳健性。

Camera-Camera2 和 Camera-Core 版本 1.0.0-alpha05

2019 年 9 月 5 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha05androidx.camera:camera-core:1.0.0-alpha05。前者是 camera-camera2:1.0.0-alpha05 中包含的提交内容,后者是 camera-core:1.0.0-alpha05 中包含的提交内容

  • API 变更:重命名了用例错误变量:

    • ImageCapture.UseCaseError 重命名为 ImageCapture.ImageCaptureError
    • VideoCapture.UseCaseError 重命名为 VideoCapture.VideoCaptureError
  • 添加了带“点按即可对焦”功能 API 的 CameraControl API

    • 添加了 API,以针对由镜头朝向选择的相机从 CameraX 获取 CameraControl

      CameraX.getCameraControl(LensFacing lensFacing)

    • 添加了 MeteringPointFactoryMeteringPointMeteringModeFocusMeteringAction 来运行“点按即可对焦”功能:

      MeteringPointFactory factory = new SensorOrientedMeteringPointFactory(width, height);
      MeteringPoint point = factory.createPoint(x, y);
      FocusMeteringAction action = FocusMeteringAction.Builder.from(point,
                                       MeteringMode.AF_ONLY)
          .addPoint(point2, MeteringMode.AE_ONLY) // could have many
          .setAutoFocusCallback(new OnAutoFocusListener(){
              public void onFocusCompleted(boolean isSuccess) {
              }
          })
          // auto calling cancelFocusAndMetering in 5 sec.
          .setAutoCancelDuration(5, TimeUnit.Second)
          .build();
      
    • 添加了 API 用于支持 CameraControl 启动和取消对焦测光:

      getCameraControl(lensFacing).startFocusAndMetering(action); getCameraControl(lensFacing).cancelFocusAndMetering();

    • 添加了用于测光点工厂的 API,这些 API 可根据 View 类协助将点按坐标转换为传感器坐标:

      MeteringPointFactory factory = new TextureViewMeteringPointFactory(textureView); MeteringPointFactory factory = new DisplayOrientedMeteringPointFactory(context, lensFacing, viewWidth, viewHeight);

  • 强制在主(界面)线程上调用以下方法;如果未调用,则抛出 IllegalStateException。将来的版本将允许在其他线程上使用并确保执行序列化。

    • CameraX.bindToLifecycle()
    • CameraX.unbind()
    • CameraX.unbindAll()
    • ImageAnalysis.setAnalyzer()
    • ImageAnalysis.getAnalyzer()
    • ImageAnalysis.removeAnalyzer()
    • Preview.removePreviewOutputListener()
    • Preview.getOnPreviewOutputUpdateListener()
    • Preview.setOnPreviewOutputUpdateListener()
  • 现在,各种配置设置均接受 null 参数,并且相应的 getter 可能会返回 null。

  • 修复了在不支持 AF/AE/AWB 设置的模拟器上进行测试时出现的问题。

  • 修复了分析图像时旋转出现的崩溃错误。

  • 修复了在旋转或在前后相机之间切换后,预览在开始时显示为黑色(无相机数据)的错误。

  • 移除了针对多个并发图像分析用例进行的测试。为确保兼容性,应用应仅附加一个图像分析用例。

  • 在相机测试套件 (WIP) 中添加了针对假相机的初始 robolectric 测试。

  • 移除了 Camera2Inititalizer 测试,因为其覆盖范围不明确/有误导性。

Camera-Camera2 和 Camera-Core 版本 1.0.0-alpha04

2019 年 8 月 7 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha04androidx.camera:camera-core:1.0.0-alpha04版本 1.0.0-alpha04 中包含这些提交内容

新功能

宽高比和分辨率选择方面的变更

CameraX 的目标是成功初始化相机会话。这意味着,CameraX 为了能够启动捕获会话(这是它的首要目标),会根据设备显示能力在分辨率/宽高比上做出让步,因此可能无法完全按照请求的方式显示。可能原因如下:

  • 设备不支持请求的分辨率
  • 兼容性问题,例如在旧版设备上,必须使用某些分辨率才能正确运行
  • 在某些设备上,某些格式仅在某些宽高比下可用
  • 对于 JPEG 或视频编码,首选“最近的 mod16”。请参阅 CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP

尽管 CameraX 会创建并管理会话,但您应始终在代码中检查用例输出所返回的图像大小,并进行相应调整。

对分辨率和宽高比设置进行了一些更改,旨在使 API 更清晰明了:

  • 现在,如果未设置宽高比,则预览用例将采用默认的 4:3 宽高比。
  • 当 CameraX 根据设备显示能力在内部考虑对所请求的分辨率和宽高比进行更改时,它首先会尝试保持相同的宽高比(由任意 setTargetAspectRatiosetTargetResolution 调用确定)
  • 分辨率的“最近的 mod16”版本被视为相同的宽高比。

ImageAnalysis 非阻塞模式

  • 现在,ImageReaderMode.ACQUIRE_LATEST_IMAGE 的行为是非阻塞行为。它会获取队列中的最新图像,但连续舍弃未使用的图像,以免相机管道发生阻塞。
  • 分析器可以无限期保存单个图像,而不会阻塞管道。
  • 如果应用提供了一个执行器,该执行器继而发生阻塞,则 ImageAnalysis 用例会发生阻塞。
  • 内部设置的默认执行器会表现为非阻塞执行器。

问题修复

  • 修复了在没有自动聚焦、自动曝光和自动白平衡的设备上捕获图像时等待 3A 收敛的超时问题
  • 修复了使用 ImageCapture 快速拍照时出现的问题。修复了错误:java.lang.IllegalStateException: maxImages (2) has already been acquired
  • 修复了未针对用例调用 setLensFacing 而导致 java.lang.IllegalArgumentException: Unable to get camera ID for use case 的问题。
  • 修复了旧版设备需要特定宽高比作为最大 JPEG 分辨率的问题
  • 修复了打开相机时应用进入后台运行的问题
  • 修复了 API <25 上的问题,移除了错误 checkAndUpdateEglState: invalid current EGLDisplay
  • 修复了在启用和启动扩展后解除绑定预览时出现的问题
  • camera-view 和 camera-extensions 的 Build 工件现作为 Alpha 版本发布

Camera-Camera2 和 Camera-Core 版本 1.0.0-alpha03

2019 年 7 月 2 日

发布了 androidx.camera:camera-core:1.0.0-alpha03androidx.camera:camera-camera2:1.0.0-alpha03版本 1.0.0-alpha03 中包含这些提交内容

API 变更

  • 在 setTarget 配置调用中添加了针对“target”的 Javadoc 说明

Camera-Core

  • 修复了快速打开/关闭或绑定/取消绑定时未配置的输入/输出 Surface 崩溃问题
  • 转向新的 Futures 实现
  • 测试修复程序以进行更可靠的测试
  • Core 集成测试现在可显示照片的拍摄时间
  • 为执行器开发了内部兼容性类
  • 定时测试应用捕获图像会等待上一步完成,这提高了稳定性

扩展功能

  • 添加了版本编号检查
  • 扩大了测试范围 - 扩展事件回调
  • 改进了内部对应的图像和元数据
  • 修复了测试应用中的模式切换问题

Camera-Camera2 和 Camera-Core 版本 1.0.0-alpha02

2019 年 6 月 5 日

发布了 androidx.camera:camera-core:1.0.0-alpha02androidx.camera:camera-camera2:1.0.0-alpha02版本 1.0.0-alpha02 中包含这些提交内容

问题修复

  • 修复了使用模拟器时被零除的问题
  • 修复了在快速拍照的同时快速解除绑定并重新绑定用例时在某些设备上发生的 NullPointerException/Surface Abandoned 错误。
  • 修复了内部问题,以确保捕获请求更新对所有 Surface 带来一致的影响
  • 改进了在新应用实例中重启用例时的稳定性
  • 更改了内部体系结构,以便为支持 API 中的执行器做好准备
  • 扩充了有关 CameraX 类和生命周期管理的 Javadoc 说明
  • 为 Antelope 性能测试应用添加了插桩测试
  • 应用 Proguard 配置中不再需要“-keepattributes 签名”

Camera-Camera2 和 Camera-Core 1.0.0-alpha01

2019 年 5 月 7 日

发布了 androidx.camera:camera-core:1.0.0-alpha01androidx.camera:camera-camera2:1.0.0-alpha01版本 1.0.0-alpha01 中包含这些提交内容

Camera-Lifecycle 版本 1.0.0

Camera-Lifecycle 版本 1.0.0-beta06

2020 年 6 月 24 日

发布了 androidx.camera:camera-lifecycle:1.0.0-beta06版本 1.0.0-beta06 中包含这些提交内容

API 变更

  • 您现在可在调用 ProcessCameraProvider#getInstance() 之前为 CameraX 配置 ProcessCameraProvider#configureInstance()。这样便可自定义 CameraXConfig,而无需在应用的 Application 类中实现 CameraXConfig.Provider。(Ia1a8d)

Camera-Lifecycle 版本 1.0.0-beta05

2020 年 6 月 10 日

发布了 androidx.camera:camera-lifecycle:1.0.0-beta05版本 1.0.0-beta05 中包含这些提交内容

问题修复

  • 修复了在手机处于“勿扰”模式时,初始化 CameraX 时应用启动崩溃的问题。InitializationException 包含 ListenableFuture,它会将初始化结果设为 CameraUnavailableException,而不是使应用崩溃。(I9909ab/149413835

Camera-Lifecycle 版本 1.0.0-beta04

2020 年 5 月 27 日

发布了 androidx.camera:camera-lifecycle:1.0.0-beta04版本 1.0.0-beta04 中包含这些提交内容

Camera-Lifecycle 版本 1.0.0-beta03

2020 年 4 月 15 日

发布了 androidx.camera:camera-lifecycle:1.0.0-beta03版本 1.0.0-beta03 中包含这些提交内容

问题修复

  • 修复了 beta03 中的回归问题:即不使用 UseCase 调用 bindToLifecycle() 时可能导致抛出异常。这样一来,如果不绑定 UseCase,就会阻止检索 Camera
  • 修复了 camera-core 的版本支持问题

Camera-Lifecycle 版本 1.0.0-beta01

2020 年 2 月 26 日

发布了 androidx.camera:camera-lifecycle:1.0.0-beta01版本 1.0.0-beta01 中包含这些提交内容

问题修复

  • 修复了在初始化期间获取 ProcessCameraProvider,使用默认配置且可以选择扩展 Application 时要记录的文档。(I5e395)

Camera-Lifecycle 版本 1.0.0-beta02

2020 年 4 月 1 日

发布了 androidx.camera:camera-lifecycle:1.0.0-beta02版本 1.0.0-beta02 中包含这些提交内容

问题修复

  • 已更新,可支持 camera-camera2:1.0.0-beta02camera-core:1.0.0-beta02 工件中的问题修复。

Camera-Lifecycle 版本 1.0.0-alpha10

2020 年 2 月 10 日

发布了 androidx.camera:camera-lifecycle:1.0.0-alpha10版本 1.0.0-alpha10 中包含这些提交内容

API 变更

  • 为 BindToLifecycle、unbind 和 unbindAll 方法添加了 @MainThread 注释。(I990d2)

Camera-Lifecycle 版本 1.0.0-alpha03

2020 年 1 月 22 日

发布了 androidx.camera:camera-lifecycle:1.0.0-alpha03版本 1.0.0-alpha03 中包含这些提交内容

更新

  • 包含多种修复和更新,以支持 Camera Core 和 Camera2 更改。

Camera-Lifecycle 版本 1.0.0-alpha02

2019 年 12 月 18 日

发布了 androidx.camera:camera-lifecycle:1.0.0-alpha02版本 1.0.0-alpha02 中包含这些提交内容

依赖项变更

  • 已更新为使用 androidx.camera:camera-core:1.0.0-alpha08

Camera-Lifecycle 版本 1.0.0-alpha01

2019 年 12 月 4 日

发布了 androidx.camera:camera-lifecycle:1.0.0-alpha01camera-lifecycle 的版本 1.0.0-alpha01 中包含这些提交内容

API 说明

  • 添加了 camera-lifecycle 工件,提供了 LifeCycleCameraProvider 接口以及一个名为 ProcessCameraProvider 的实现,该实现可提供先前核心中的 CameraX 类的许多功能,并可通过 getInstance() 方法获取。
  • 应用应包含 camera-lifecycle 库以使用 CameraX。
  • 如需了解如何使用 ProcessCameraProvider 对 CameraX 执行初始化,请参阅 camera-core 部分中的说明。

Camera-Extensions 和 Camera-View 版本 1.0.0

Camera-Extensions 版本 1.0.0-alpha13

2020 年 6 月 24 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha13版本 1.0.0-alpha13 中包含这些提交内容

问题修复

  • 添加了用于按相机 ID 和 CameraCharacteristics 过滤相机的实验性界面。(I28f61)

Camera-View 版本 1.0.0-alpha13

2020 年 6 月 24 日

发布了 androidx.camera:camera-view:1.0.0-alpha13版本 1.0.0-alpha13 中包含这些提交内容

问题修复

  • 当绑定到 LifecycleOwner(其 Lifecycle 在绑定后很快就会过渡到“已销毁”状态)时,CameraView 不再会崩溃并出现 IllegalArgumentException。绑定处于“已销毁”状态的 Lifecycle 将不会尝试打开相机。(I7c2b8)
  • PreviewView StreamState 现在可通过 CameraView.getPreviewStreamState() 获取 (I21a2b)

Camera-Extensions 版本 1.0.0-alpha12

2020 年 6 月 10 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha12版本 1.0.0-alpha12 中包含这些提交内容

问题修复

  • 修复了在手机处于“勿扰”模式时,初始化 CameraX 时应用启动崩溃的问题。InitializationException 包含 ListenableFuture,它会将初始化结果设为 CameraUnavailableException,而不是使应用崩溃。(I9909ab/149413835

Camera-View 版本 1.0.0-alpha12

2020 年 6 月 10 日

发布了 androidx.camera:camera-view:1.0.0-alpha12版本 1.0.0-alpha12 中包含这些提交内容

问题修复

  • 添加了 PreviewView#getBitmap() API,该 API 会返回在 Preview Surface 上显示的内容的位图表示法。(I9b500b/157659818

Camera-Extensions 版本 1.0.0-alpha11

2020 年 5 月 27 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha11版本 1.0.0-alpha11 中包含这些提交内容

Camera-View 版本 1.0.0-alpha12

2020 年 6 月 10 日

发布了 androidx.camera:camera-view:1.0.0-alpha12版本 1.0.0-alpha12 中包含这些提交内容

新功能

API 变更

问题修复

  • 添加了 PreviewView#getBitmap() API,该 API 会返回在 Preview Surface 上显示的内容的位图表示法。(I9b500b/157659818

Camera-View 版本 1.0.0-alpha11

2020 年 5 月 27 日

发布了 androidx.camera:camera-view:1.0.0-alpha11版本 1.0.0-alpha11 中包含这些提交内容

API 变更

  • 添加了 PreviewView#getPreviewStreamState API,以允许应用观察预览是否为流式传输。当 PreviewView 处于 TEXTURE_VIEW 模式时,STREAMING 状态还保证预览图像可见。(Ic0906b/154652477
  • 新增了 PreviewView#setDeviceRotationForRemoteDisplayMode() API,以便在应用以远程显示模式运行时为转换计算提供设备旋转。(I59b95b/153514525

问题修复

  • 修复了搭载 Android 7.0 及更低版本的 FULL/LIMITED/LEVEL_3 相机出现的预览失真问题。对于 Android 版本 7.0 或更低版本,强制使用 ImplementationMode#TEXTURE_VIEW 模式。(I83e30b/155085307
  • PreviewView#createSurfaceProvider() 中移除了 CameraInfo 参数,PreviewView 现在会在内部从 SurfaceRequest 中检索该参数。(If18f0b/154652477
  • 修复了 VideoCapture 在 CameraView 中的默认宽高比为 16:9 的问题。(Ie6a7bb/153237864
  • 修复了当滑出 Preview Fragment 然后在 ViewPager2 中往回滑动时出现的 PreviewView 黑屏问题。此外,还修复了 removeView(previewview)addView(previewView) 时出现的问题。(Iab555b/149877652b/147354615
  • 更新了 CameraView#takePicture() API 以允许将图片保存到 UriOutputStream。更新了测试应用以使用 Uri 作为规范化示例。(Ia2459b/153607583
  • 您可以设置 ScaleType 属性,以从 XML 布局中设置 PreviewView 的缩放类型。(I08565b/153015659
  • 移除了 CameraView.ScaleType。改为使用 PreviewView.ScaleType 设置/获取缩放类型。(Ia8974b/153014831
  • 如果 PreviewView 还没有背景颜色,默认为其指定背景颜色。这样可以避免在预览流开始前显示其后面的内容。(I09fad)

Camera-Extensions 版本 1.0.0-alpha10

2020 年 4 月 15 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha10版本 1.0.0-alpha10 中包含这些提交内容

问题修复

  • 修复了 Camera-Core 的版本支持问题

Camera-View 版本 1.0.0-alpha10

2020 年 4 月 15 日

发布了 androidx.camera:camera-view:1.0.0-alpha010版本 1.0.0-alpha010 中包含这些提交内容

问题修复

  • 修复了之前已知的问题:即 PreviewView 的 surfaceView 实现在某些设备上无法正常运行,并且会导致应用在恢复预览后崩溃。(I5ed6b)

Camera-Extensions 版本 1.0.0-alpha09

2020 年 4 月 1 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha09版本 1.0.0-alpha09 中包含这些提交内容

问题修复

  • 已更新,可支持 camera-camera2:1.0.0-beta02camera-core:1.0.0-beta02camera-lifecycle:1.0.0-beta02 工件中的问题修复

Camera-View 版本 1.0.0-alpha09

2020 年 4 月 1 日发布了 androidx.camera:camera-view:1.0.0-alpha09版本 1.0.0-alpha09 中包含这些提交内容

已知问题

  • 在某些设备上,可能无法将 ImplementationMode.SURFACE_VIEWPreviewView 一起使用,这是因为:用于预览的 SurfaceView 会在其所在的窗口生命周期被终止后,使其 Surface 失效,而重启后,相机会重新打开,并可能会在 SurfaceView 的 Surface 重新回到有效状态之前,尝试恢复预览。目前,您应使用 ImplementationMode.TEXTURE_VIEW

API 变更

  • PreviewView.setImplementationMode() 已重命名为 PreviewView.setPreferredImplementationMode()
  • PreviewView.getImplementationMode() 已重命名为 PreviewView.getPreferredImplementationMode()
  • 使用 PreviewView.createSurfaceProvider(CameraInfo) 替换了 PreviewView.getSurfaceProvider(),前者可在可能的情况下,使用 ImplementationMode.SURFACE_VIEW 获取用于优化预览的可为 null 的 CameraInfo 实例。如果传递了 null 实例,或者如果您将首选实现模式设置为 ImplementationMode.TEXTURE_VIEWImplementationMode.TEXTURE_VIEW 将在内部使用。
  • 以下代码示例展示了以前使用的预览用例如何与 PreviewView 一起使用。

    preview.setSurfaceProvider(previewView.previewSurfaceProvider)
    cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview)
    

    目前,您可以编写以下代码:

    val camera = cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview)
    previewView.preferredImplementationMode = ImplementationMode.TEXTURE_VIEW
    preview.setSurfaceProvider(previewView.createSurfaceProvider(camera.cameraInfo))
    
  • @UiThread 注释已添加到 PreviewView.getSurfaceProvider(),这意味着必须从主线程调用它。(I192f3)

  • 添加了 PreviewView.setScaleType(),可用于设置预览的缩放类型。它接受 PreviewView.ScaleType 中的某个值,默认值为 PreviewView.ScaleType.FILL_CENTER

  • 添加了 PreviewView.getScaleType()

  • 不再支持使用 implementationMode 属性为 XML 布局中的 PreviewView 设置实现模式。

  • 为 PreviewView 添加了 createMeteringPointFactory() API,以支持将 PreviewView 中的 (x, y) 转换为 MeteringPoint。(Ib36d7)

问题修复

  • 修复了 PreviewView 尺寸更改后,预览不正确的问题。(I71101)

Camera-Extensions 版本 1.0.0-alpha08

2020 年 2 月 26 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha08版本 1.0.0-alpha08 中包含这些提交内容

Camera-View 版本 1.0.0-alpha08

2020 年 2 月 26 日

发布了 androidx.camera:camera-view:1.0.0-alpha08版本 1.0.0-alpha08 中包含这些提交内容

问题修复

  • 使用 ExecutorCallback 替换了 SurfaceRequest.provideSurface() 上的 ListenableFuture。这简化了 API,因为无需再处理 provideSurface() 上的异常,并且强制要求不能取消 provideSurface() 回调。这是为了防止旧版设备因过早释放 Surface 导致崩溃的问题。SurfaceRequest.Result 对象现在用于跟踪 SurfaceRequest 如何使用所提供的 Surface。(I7854b)
  • SurfaceRequest.setSurface(Surface) 已重命名为 SurfaceRequest.provideSurface(Surface)SurfaceRequest.setWillNotComplete() 已重命名为 SurfaceRequest.willNotProvideSurface()。(I224fe)
  • 通过保留可设置默认 CameraXConfig 提供程序的标记,修复了启用 ProGuard 的应用变体的初始化问题。(I2d6c1)

Camera-Extensions 版本 1.0.0-alpha07

2020 年 2 月 10 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha07版本 1.0.0-alpha07 中包含这些提交内容

问题修复

  • 之前在 ImageCapture.OnImageSavedCallback.onError()ImageCapture.OnImageCapturedCallback.onError() 中传递的参数现已替换为单个参数 ImageCaptureException,该参数仍然包含之前传递的所有信息。
  • 之前在 ImageCapture.OnImageSavedCallback.onImageSaved() 中传递的文件参数已移除。(I750d2)

Camera-View 版本 1.0.0-alpha07

2020 年 2 月 10 日

发布了 androidx.camera:camera-view:1.0.0-alpha07版本 1.0.0-alpha07 中包含这些提交内容

API 变更

  • 现在,在缩放以填充父级 PreviewView 之前,PreviewViewTextureView 实现可将 TextureView 的尺寸设置为摄像头传感器输出尺寸。如果您希望相机预览完整填充界面中的某个部分(例如整个屏幕),就不应将 PreviewView 的尺寸设置为固定值,或让其封装自己的内容(例如使用属性“wrap_content”),因为这可能会导致相机预览仅填充 PreviewView 的一部分(如果摄像头传感器输出尺寸较小)。相反,您应将 PreviewView 设置为与其父级项一样大(例如使用属性“match_parent”)。(1204869)

问题修复

  • 更新了 ImageCapture,允许将图片保存到 UriOutputStream。将过载 takePicture 方法合并成了单个方法。更新了测试应用,以将 Uri 用作规范示例。(Ia3bec)
  • Preview.PreviewSurfaceProvider 已重命名为 Preview.SurfaceProvider。开发者使用 SurfaceProvider 时无需再创建自己的 ListenableFuture;现在可通过新的 SurfaceRequest 对象提供 Surface。移除了 Preview.getPreviewSurfaceProvider() 方法,因为在 PreviewPreviewView 等其他类结合使用时,此方法可能会被滥用。(I20105)
  • 之前在 ImageCapture.OnImageSavedCallback.onError()ImageCapture.OnImageCapturedCallback.onError() 中传递的参数现已替换为单个参数 ImageCaptureException,该参数仍然包含之前传递的所有信息。
  • 之前在 ImageCapture.OnImageSavedCallback.onImageSaved() 中传递的文件参数已移除。(I750d2)
  • 更新了 API,CameraInfogetZoomRatio()getMaxZoomRatio()getMinZoomRatio()getLinearZoom() 方法合并到了 getZoomState()(会返回 ZoomState 实例)中。(Ib19fe)

Camera-Extensions 版本1.0.0-alpha06

2020 年 1 月 22 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha06版本 1.0.0-alpha06 中包含这些提交内容

更新

  • 包含多种修复和更新,以支持 Camera Core 和 Camera2 更改。

Camera-View 版本 1.0.0-alpha06

2020 年 1 月 22 日

发布了 androidx.camera:camera-view:1.0.0-alpha06版本 1.0.0-alpha06 中包含这些提交内容

更新

  • 包含多种修复和更新,以支持 Camera Core 和 Camera2 更改。

Camera-Extensions 版本 1.0.0-alpha05

2019 年 12 月 18 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha05版本 1.0.0-alpha05 中包含这些提交内容

问题修复

  • 已更新为与内部 Camera Core API 匹配。

Camera-View 版本 1.0.0-alpha05

2019 年 12 月 18 日

发布了 androidx.camera:camera-view:1.0.0-alpha05版本 1.0.0-alpha05 中包含这些提交内容

已知问题

  • 使用 PreviewView 时,宽高比可能不正确 (b/146215202)。

新功能

  • 实现了一个名为 PreviewView.TextureViewImplementation 的新类,用于将 SurfaceTexture 的生命周期与相机使用的 TextureView Surface 进行同步。

Camera-Extensions 版本 1.0.0-alpha04

2019 年 12 月 4 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha04camera-extensions 的版本 1.0.0-alpha04 中包含这些提交内容

API 变更

  • 现在,检查扩展的可用性以及启用扩展需要采用 CameraSelector 作为输入参数。这必须与用于绑定用例的 CameraSelector 相同。

    val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
    val builder = ImageCapture.Builder()
    val bokehImageCaptureExtender = BokehImageCaptureExtender.create(builder)
    if (bokehImageCaptureExtender.isExtensionAvailable(cameraSelector)) {
        bokehImageCaptureExtender.enableExtension(cameraSelector)
    }
    val imageCapture = builder.build()
    mCameraProvider?.bindToLifecycle(this, cameraSelector, imageCapture)
    
  • 您必须先初始化扩展,然后才能使用扩展库。

    val availability = ExtensionsManager.init()
    Futures.addCallback<ExtensionsManager.ExtensionsAvailability>(
       availability,
       object : FutureCallback<ExtensionsManager.ExtensionsAvailability> {
           override fun onSuccess(availability: ExtensionsManager.ExtensionsAvailability?) {
               // Ready to make extensions calls
           }
           override fun onFailure(throwable: Throwable) {
               // Extensions could not be initialized
           }
       },
       Executors.newSingleThreadExecutor()
    )
    

Camera-View 版本 1.0.0-alpha04

2019 年 12 月 4 日

发布了 androidx.camera:camera-view:1.0.0-alpha04camera-view 的版本 1.0.0-alpha04 中包含这些提交内容

API 变更

  • 提供了一个 PreviewView 类,用于在应用中轻松显示预览用例的输出。
  • 可以在布局中包含 PreviewView

    <androidx.camera.view.PreviewView
      android:id="@+id/preview_view"
      … />
    
  • PreviewView 提供了 PreviewSurfaceProvider 以便于轻松连接预览用例

    preview.setPreviewSurfaceProvider(previewView.previewSurfaceProvider)
    
  • ZoomLevel”现在为“ZoomRatio”(采用 API 命名)

  • 某些方法参数已更改为可以为 null

Camera-Extensions 和 Camera-View 版本 1.0.0-alpha03

2019 年 10 月 9 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha03androidx.camera:camera-view:1.0.0-alpha03。前者是 camera-extensions:1.0.0-alpha03 中包含的提交内容,后者是 camera-view:1.0.0-alpha03 中包含的提交内容

新功能

  • 为扩展程序添加了 Context Initializer。扩展程序版本递增至 1.1.0

Camera-Extensions 和 Camera-View 版本 1.0.0-alpha02

2019 年 9 月 5 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha02androidx.camera:camera-view:1.0.0-alpha02。前者是 camera-extensions:1.0.0-alpha02 中包含的提交内容,后者是 camera-view:1.0.0-alpha01 中包含的提交内容

  • 添加了用于验证 PreviewImageProcessorImpl 是否正确实现了时间戳的测试。
  • 修复了 Nexus 5(API 级别 21)上的 ExtensionTest 测试故障,并确保可正常预览。

Camera-Extensions 和 Camera-View 版本 1.0.0-alpha01

2019 年 8 月 7 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha01androidx.camera:camera-view:1.0.0-alpha01。前者是 camera-extensions:1.0.0-alpha01 中包含的提交内容,后者是 camera-view:1.0.0-alpha01 中包含的提交内容

  • 新增了适用于将来相机扩展的库,用于访问受支持设备上的效果。该库仍在开发中。
  • 新增了 Camera View 类。该库仍在开发中。