The camera engine will notify anyone about camera events that took place, either on their own or after developer action. To access these events, set up one or more CameraListener instances.

All actions taken on a CameraView instance are asynchronous, which means that the callback can be executed at any time in the future. For convenience, all of them are executed on the UI thread.

camera.addCameraListener(new CameraListener() {

    public void onCameraOpened(CameraOptions options) {}

    public void onCameraClosed() {}

    public void onCameraError(CameraException error) {}

    public void onPictureTaken(PictureResult result) {}

    public void onVideoTaken(VideoResult result) {}
    
    public void onOrientationChanged(int orientation) {}

    public void onAutoFocusStart(PointF point) {}
    
    public void onAutoFocusEnd(boolean successful, PointF point) {}
    
    public void onZoomChanged(float newValue, float[] bounds, PointF[] fingers) {}
    
    public void onExposureCorrectionChanged(float newValue, float[] bounds, PointF[] fingers) {}

    public void onVideoRecordingStart() {}
    
    public void onVideoRecordingEnd() {}
});

Lifecycle

CameraView has its own lifecycle, which is basically made of an open and a closed state. You will listen to these events using onCameraOpened and onCameraClosed callbacks:

camera.addCameraListener(new CameraListener() {

    /**
     * Notifies that the camera was opened.
     * The options object collects all supported options by the current camera.
     */
    @Override
    public void onCameraOpened(CameraOptions options) {}

    /**
     * Notifies that the camera session was closed.
     */
    @Override
    public void onCameraClosed() {}

});

The open callback is especially important because the CameraOptions includes all the available options of the current sensor. This can be used to adjust the UI, for example, show a flash icon if flash is supported.

Method Description
open() Starts the engine. This will cause a future call to onCameraOpened() (or an error)
close() Stops the engine. This will cause a future call to onCameraClosed()
isOpened() Returns true if open() was called successfully. This does not mean that camera is showing preview already.
getCameraOptions() If camera was opened, returns non-null object with information about what is supported.

Take a look at public methods in CameraOptions to know more.