Android P Camera App(一)

本文介绍了Android P Camera App的主要组件,包括CameraActivity、OneCameraOpener接口、Camera2OneCameraOpenerImpl、OneCameraManager接口、Camera2OneCameraManagerImpl、CameraController、CameraAgent、CameraOpenCallback、CameraProvider等。CameraController实现了设备打开和关闭的回调及相机提供者接口,CameraAgent由CameraAgentFactory创建,ModuleManager和ModuleAgent则负责模块管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要Activity:

CameraActivity继承自QuickActivity,QuickActivity主要是为了解决在锁屏中的double resume问题;

 

主要的类/接口:

OneCameraOpener,是一个接口,里面就定义了一个open方法,用来打开相机设备;
Camera2OneCameraOpenerImpl实现了OneCameraOpener接口,其主要职能是通过CameraManager打开一个camera设备;

 

OneCameraManager,是一个接口,负责提供有关当前设备上可用摄像机硬件的详细信息;
Camera2OneCameraManagerImpl实现了OneCameraManager接口,也是通过CameraManager实现了接口中定义的方法;

 

CameraController,实现了两个接口分别是CameraAgent.CameraOpenCallback和CameraProvider;
CameraAgent,是一个抽象类,定义在frameworks/ex/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java,提供可能的相机设备操作的接口;
CameraOpenCallback是CameraAgent的一个内部接口。打开或关闭相机设备时的任何事件都会调用此接口,其中的错误回调与框架{@linkandroid.hardware.Camera.ErrorCallback}中定义的错误回调不同,后者在打开相机后使用。

public static interface CameraOpenCallback {
    /**
     * Callback when camera open succeeds.
     */
    public void onCameraOpened(CameraProxy camera);

    /**
     * Callback when {@link com.android.camera.CameraDisabledException} is
     * caught.
     *
     * @param cameraId The disabled camera.
     */
    public void onCameraDisabled(int cameraId);

    /**
     * Callback when {@link com.android.camera.CameraHardwareException} is
     * caught.
     *
     * @param cameraId The camera with the hardware failure.
     * @param info The extra info regarding this failure.
     */
    public void onDeviceOpenFailure(int cameraId, String info);

    /**
     * Callback when trying to open the camera which is already opened.
     *
     *@param cameraId The camera which is causing the open error.
     */
    public void onDeviceOpenedAlready(int cameraId, String info);

    /**
     * Callback when {@link java.io.IOException} is caught during
     * {@link android.hardware.Camera#reconnect()}.
     *
     * @param mgr The {@link CameraAgent}
     *            with the reconnect failure.
     */
    public void onReconnectionFailure(CameraAgent mgr, String info);
}

CameraProvider是Camera App内部定义的一个接口,定义相机提供者;
也就是说CameraController实现了打开和关闭设备时的回调接口&相机提供者接口;传入其中的CameraAgent通过CameraAgentFactory创建;
CameraAgentFactory定义在frameworks/ex/camera2/portability/src/com/android/ex/camera2/portability/CameraAgentFactory.java;

 

 

ModuleManager,模块管理器接口维护{@link ModuleManagerImpl.ModuleAgent};
ModuleManagerImpl,ModuleManager接口实现;内里有一组ModuleAgent数据;

private final SparseArray<ModuleAgent> mRegisteredModuleAgents = new
            SparseArray<ModuleAgent>(2);

ModuleAgent,ModuleManager的一个内部接口,负责维护静态特性和模块的创建。
ModulesInfo,一个包含模块信息的类,并将它们注册到{@link com.android.camera.app.ModuleManager};其内的setupModules方法中注册了各种module,如PhotoModule、VideoModule等;

<!--Index of camera modes. -->
<integer name="camera_mode_photo">0</integer>
<integer name="camera_mode_video">1</integer>
<integer name="camera_mode_refocus">2</integer>
<integer name="camera_mode_photosphere">3</integer>
<integer name="camera_mode_panorama">4</integer>
<integer name="camera_mode_gcam">5</integer>
<integer name="camera_mode_capture_intent">6</integer>


<!-- Ordered list of all camera modes. -->
<integer-array name="camera_modes">
    <item>@integer/camera_mode_photo</item>
    <item>@integer/camera_mode_video</item>
    <item>@integer/camera_mode_refocus</item>
    <item>@integer/camera_mode_photosphere</item>
    <item>@integer/camera_mode_panorama</item>
    <item>@integer/camera_mode_gcam</item>
    <item>@integer/camera_mode_capture_intent</item>
</integer-array>

 

CameraAppUI,CameraAppUI集中控制跨模块共享的视图,而模块特定视图将在每个模块UI中处理;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值