注意:本页面引用了 Camera2 软件包。除非您的应用需要 Camera2 的特定低级功能,否则我们建议使用 CameraX。CameraX 和 Camera2 都支持 Android 5.0(API 级别 21)及更高版本。
在可折叠设备上开发摄像头应用时,摄像头开发者可能会遇到独特的挑战。与智能手机不同,智能手机中与显示方向、摄像头方向和朝向相关的许多假设通常是有效的,而可折叠设备可以具有多样化的外形规格、显示布局和摄像头组合。
智能手机的摄像头通常具有与显示屏匹配的纵向方向。但是,对于某些可折叠状态,情况可能并非如此。展开的屏幕可能有一个传感器是纵向方向,另一个传感器是横向方向。
如果您的摄像头应用使用 SurfaceTexture
或自定义渲染管道,请注意摄像头传感器方向。
这可确保渲染的内容始终物理垂直且像素保持正方形,从而避免在水平或垂直方向上拉伸。
本指南提供了 Camera2 开发者需要考虑的信息以及调整不同可折叠设备状态下摄像头预览渲染的步骤。
设备状态切换如何影响摄像头
可折叠设备可能包括
- 两个或更多物理显示屏
- 多个物理摄像头设备
这些设备可以根据设备状态变为活动状态。为简化设备状态处理,某些设备实现了由两个或更多物理传感器组成的逻辑摄像头。
如果开发者在此类逻辑摄像头设备上打开并启用预览流式传输,摄像头将根据特定的折叠状态自动在物理设备之间切换。
例如,考虑一个具有两个显示屏的可折叠设备
- 折叠状态下的常规纵向屏幕,带有一个物理“外部”前置摄像头,呈纵向方向。
- 展开状态下启用的可折叠屏幕,带有一个“内部”前置物理摄像头,相对于展开的显示屏呈横向方向。
当用户折叠或展开设备时,如果应用正在从前置逻辑摄像头进行流式传输,则设备实现可能会根据每个设备状态切换在内部和外部物理传感器之间切换。
显示切换可能需要应用调整其 UI。
除了任何 UI 调整之外,开发者可能还需要考虑调整摄像头预览相对于活动物理摄像头的渲染方式。
物理摄像头设备切换
逻辑摄像头设备接口提供了处理物理摄像头切换所需的 API。开发者必须监控 active physical id 的值。
在可折叠设备上,活动物理 ID 捕获结果可能会根据折叠和展开等不同可折叠状态切换而改变。
在此类事件中,开发者必须使用当前活动的物理 ID 并检查相应的 camera characteristics。
两个最重要的、可能会改变并影响预览渲染的摄像头特性是 sensor orientation(传感器方向)和 lens facing(镜头朝向)。
如果您的应用的预览渲染管道依赖于静态摄像头参数来计算其最终变换矩阵,请确保您传递当前值并更新图形变换。
要更深入地了解摄像头预览管道以及如何计算变换,请查阅摄像头预览指南。
其他无效假设
不建议缓存摄像头特性值。
您不能假定摄像头特性会保持不变,因为当设备折叠或展开时,这些特性可能会改变。因此,您不应存储和重用摄像头特性。相反,每次都应检查摄像头特性。
考虑以下情况:摄像头应用在外置前显示屏上启动并缓存了当前前置和后置摄像头特性。如果应用在内置显示屏上重新启动,则活动的前置物理传感器可能具有不同的方向,这可能会触发不需要的预览渲染副作用。