可折叠设备和相机

注意:本页介绍的是 Camera2 软件包。除非您的应用需要 Camera2 中的特定低级功能,否则我们建议您使用 CameraX。CameraX 和 Camera2 都支持 Android 5.0(API 级别 21)及更高版本。

在开发可在可折叠设备上运行的相机应用时,相机开发者可能会遇到独特的挑战。与智能手机不同,智能手机通常可以假定与显示屏方向、摄像头方向和朝向相关的几项假设,但可折叠设备可能具有多种外形规格、显示屏布局和摄像头组合。

智能手机的相机通常与显示屏保持一致的纵向方向。不过,对于某些可折叠状态,情况可能并非如此。展开的屏幕可能有一个传感器的屏幕方向为纵向,另一个传感器的屏幕方向为横向。

如果您的相机应用使用 SurfaceTexture 或自定义渲染流水线,请注意摄像头传感器方向。

这样可确保渲染的内容始终垂直显示,像素保持方形,避免水平或垂直方向的拉伸。

本指南介绍了 Camera2 开发者需要考虑的事项,以及针对不同可折叠设备状态调整相机预览渲染的步骤。

设备状态切换对摄像头的影响

可折叠设备可能包括:

  • 两个或更多实体显示屏
  • 多个实体摄像头设备

这些设备可能会变为活跃状态,具体取决于设备状态。为了简化设备状态处理,某些设备会实现由两个或更多物理传感器组成的逻辑摄像头。

如果开发者在这种逻辑摄像头设备上打开并启用预览流式传输,相机会根据特定折叠状态在物理设备之间自动切换。

例如,假设有一款具有两个显示屏的可折叠设备:

  • 折叠状态下的常规纵向屏幕,其中物理“外置”前置摄像头处于纵向模式。
  • 在展开状态下启用的可折叠屏幕,其中包含相对于展开显示屏处于横向模式的“内部”前置实体摄像头。

当用户在应用从前置逻辑摄像头流式传输数据时折叠或展开设备时,设备实现可能会在内部和外部实体传感器之间切换,以响应每次设备状态切换。

显示屏切换可能需要应用调整其界面。

除了任何界面调整之外,开发者可能还需要考虑调整相机预览针对有效物理摄像头的呈现方式。

实体相机设备开关

逻辑摄像头设备接口提供了处理实体摄像头开关所需的 API。开发者必须监控有效的物理 ID 的值。

在可折叠设备上,有效的物理身份证件拍摄结果可能会因不同的可折叠状态切换(例如折叠和展开)而发生变化。

在这种情况下,开发者必须使用当前有效的物理 ID 并检查相应的摄像头特性

可能发生变化并影响预览呈现的两个最重要的相机特性是传感器方向镜头朝向

如果应用的预览渲染流水线依赖于静态相机参数来计算其最终转换矩阵,请确保传递当前值并更新图形转换。

如需深入了解相机预览流水线以及如何计算转换,请参阅相机预览指南

其他无效假设

不建议缓存摄像头特性值。

您不能假定相机特性会保持不变,因为这些特性可能会在设备折叠或展开时发生变化。因此,您不应存储和重复使用相机特性。而是每次都检查相机特性。

假设相机应用在外屏上启动,并缓存当前的前置和后置摄像头特性。如果应用在内部显示屏上重启,处于活动状态的前置物理传感器可能具有不同的屏幕方向,可能会触发不必要的预览渲染副作用。