Skip to content

Most visited

Recently visited

Added in API level 21


The android.hardware.camera2 package provides an interface to individual camera devices connected to an Android device. It replaces the deprecated Camera class.

This package models a camera device as a pipeline, which takes in input requests for capturing a single frame, captures the single image per the request, and then outputs one capture result metadata packet, plus a set of output image buffers for the request. The requests are processed in-order, and multiple requests can be in flight at once. Since the camera device is a pipeline with multiple stages, having multiple requests in flight is required to maintain full framerate on most Android devices.

To enumerate, query, and open available camera devices, obtain a CameraManager instance.

Individual CameraDevices provide a set of static property information that describes the hardware device and the available settings and output parameters for the device. This information is provided through the CameraCharacteristics object, and is available through getCameraCharacteristics(String)

To capture or stream images from a camera device, the application must first create a camera capture session with a set of output Surfaces for use with the camera device, with createCaptureSession(List, CameraCaptureSession.StateCallback, Handler). Each Surface has to be pre-configured with an appropriate size and format (if applicable) to match the sizes and formats available from the camera device. A target Surface can be obtained from a variety of classes, including SurfaceView, SurfaceTexture via Surface(SurfaceTexture), MediaCodec, MediaRecorder, Allocation, and ImageReader.

Generally, camera preview images are sent to SurfaceView or TextureView (via its SurfaceTexture). Capture of JPEG images or RAW buffers for DngCreator can be done with ImageReader with the JPEG and RAW_SENSOR formats. Application-driven processing of camera data in RenderScript, OpenGL ES, or directly in managed or native code is best done through Allocation with a YUV Type, SurfaceTexture, and ImageReader with a YUV_420_888 format, respectively.

The application then needs to construct a CaptureRequest, which defines all the capture parameters needed by a camera device to capture a single image. The request also lists which of the configured output Surfaces should be used as targets for this capture. The CameraDevice has a factory method for creating a request builder for a given use case, which is optimized for the Android device the application is running on.

Once the request has been set up, it can be handed to the active capture session either for a one-shot capture or for an endlessly repeating use. Both methods also have a variant that accepts a list of requests to use as a burst capture / repeating burst. Repeating requests have a lower priority than captures, so a request submitted through capture() while there's a repeating request configured will be captured before any new instances of the currently repeating (burst) capture will begin capture.

After processing a request, the camera device will produce a TotalCaptureResult object, which contains information about the state of the camera device at time of capture, and the final settings used. These may vary somewhat from the request, if rounding or resolving contradictory parameters was necessary. The camera device will also send a frame of image data into each of the output Surfaces included in the request. These are produced asynchronously relative to the output CaptureResult, sometimes substantially later.


CameraCaptureSession A configured capture session for a CameraDevice, used for capturing images from the camera or reprocessing images captured from the camera in the same session previously. 

A callback object for tracking the progress of a CaptureRequest submitted to the camera device. 

CameraCaptureSession.StateCallback A callback object for receiving updates about the state of a camera capture session. 

The properties describing a CameraDevice

CameraCharacteristics.Key<T> A Key is used to do camera characteristics field lookups with get(CameraCharacteristics.Key)
CameraConstrainedHighSpeedCaptureSession A constrained high speed capture session for a CameraDevice, used for capturing high speed images from the CameraDevice for high speed video recording use case. 

The CameraDevice class is a representation of a single camera connected to an Android device, allowing for fine-grain control of image capture and post-processing at high frame rates. 

CameraDevice.StateCallback A callback objects for receiving updates about the state of a camera device. 

A system service manager for detecting, characterizing, and connecting to CameraDevices

CameraManager.AvailabilityCallback A callback for camera devices becoming available or unavailable to open. 
CameraManager.TorchCallback A callback for camera flash torch modes becoming unavailable, disabled, or enabled. 
CameraMetadata<TKey> The base class for camera controls and information. 
CaptureFailure A report of failed capture for a single image capture from the image sensor. 

An immutable package of settings and outputs needed to capture a single image from the camera device. 

CaptureRequest.Builder A builder for capture requests. 
CaptureRequest.Key<T> A Key is used to do capture request field lookups with get(CaptureResult.Key) or to set fields with set(Key, Object)

The subset of the results of a single image capture from the image sensor. 

CaptureResult.Key<T> A Key is used to do capture result field lookups with get(CaptureResult.Key)
DngCreator The DngCreator class provides functions to write raw pixel data as a DNG file. 

The total assembled results of a single image capture from the image sensor. 



CameraAccessException is thrown if a camera device could not be queried or opened by the CameraManager, or if the connection to an opened CameraDevice is no longer valid. 

This site uses cookies to store your preferences for site-specific language and display options.


This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.