Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Nested Classes](https://developer.android.com/reference/android/hardware/Camera#nestedclasses) \| [Constants](https://developer.android.com/reference/android/hardware/Camera#constants) \| [Methods](https://developer.android.com/reference/android/hardware/Camera#pubmethods) \| [Protected Methods](https://developer.android.com/reference/android/hardware/Camera#promethods) \| [Inherited Methods](https://developer.android.com/reference/android/hardware/Camera#inhmethods)

# Camera

*** ** * ** ***

[Kotlin](https://developer.android.com/reference/kotlin/android/hardware/Camera "View this page in Kotlin") \|Java


`
public


class
Camera
`


`

extends https://developer.android.com/reference/java/lang/Object


`

`


`

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.hardware.Camera |

<br />

*** ** * ** ***


**This class was deprecated
in API level 21.**   

We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new
applications.

The Camera class is used to set image capture settings, start/stop preview,
snap pictures, and retrieve frames for encoding for video. This class is a
client for the Camera service, which manages the actual camera hardware.

To access the device camera, you must declare the
`https://developer.android.com/reference/android/Manifest.permission#CAMERA` permission in your Android
Manifest. Also be sure to include the
[\<uses-feature\>](https://developer.android.com/guide/topics/manifest/uses-feature-element)
manifest element to declare camera features used by your application.
For example, if you use the camera and auto-focus feature, your Manifest
should include the following:

```
 <uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
 <uses-feature android:name="android.hardware.camera.autofocus" />
```

To take pictures with this class, use the following steps:

1. Obtain an instance of Camera from `https://developer.android.com/reference/android/hardware/Camera#open(int)`.
2. Get existing (default) settings with `https://developer.android.com/reference/android/hardware/Camera#getParameters()`.
3. If necessary, modify the returned `https://developer.android.com/reference/android/hardware/Camera.Parameters` object and call `https://developer.android.com/reference/android/hardware/Camera#setParameters(android.hardware.Camera.Parameters)`.
4. Call `https://developer.android.com/reference/android/hardware/Camera#setDisplayOrientation(int)` to ensure correct orientation of preview.
5. **Important** : Pass a fully initialized `https://developer.android.com/reference/android/view/SurfaceHolder` to `https://developer.android.com/reference/android/hardware/Camera#setPreviewDisplay(android.view.SurfaceHolder)`. Without a surface, the camera will be unable to start the preview.
6. **Important** : Call `https://developer.android.com/reference/android/hardware/Camera#startPreview()` to start updating the preview surface. Preview must be started before you can take a picture.
7. When you want, call `https://developer.android.com/reference/android/hardware/Camera#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback)` to capture a photo. Wait for the callbacks to provide the actual image data.
8. After taking a picture, preview display will have stopped. To take more photos, call `https://developer.android.com/reference/android/hardware/Camera#startPreview()` again first.
9. Call `https://developer.android.com/reference/android/hardware/Camera#stopPreview()` to stop updating the preview surface.
10. **Important:** Call `https://developer.android.com/reference/android/hardware/Camera#release()` to release the camera for use by other applications. Applications should release the camera immediately in `https://developer.android.com/reference/android/app/Activity#onPause()` (and re-`https://developer.android.com/reference/android/hardware/Camera#open()` it in `https://developer.android.com/reference/android/app/Activity#onResume()`).

To quickly switch to video recording mode, use these steps:

1. Obtain and initialize a Camera and start preview as described above.
2. Call `https://developer.android.com/reference/android/hardware/Camera#unlock()` to allow the media process to access the camera.
3. Pass the camera to `https://developer.android.com/reference/android/media/MediaRecorder#setCamera(android.hardware.Camera)`. See `https://developer.android.com/reference/android/media/MediaRecorder` information about video recording.
4. When finished recording, call `https://developer.android.com/reference/android/hardware/Camera#reconnect()` to re-acquire and re-lock the camera.
5. If desired, restart preview and take more photos or videos.
6. Call `https://developer.android.com/reference/android/hardware/Camera#stopPreview()` and `https://developer.android.com/reference/android/hardware/Camera#release()` as described above.

This class is not thread-safe, and is meant for use from one event thread.
Most long-running operations (preview, focus, photo capture, etc) happen
asynchronously and invoke callbacks as necessary. Callbacks will be invoked
on the event thread `https://developer.android.com/reference/android/hardware/Camera#open(int)` was called from. This class's methods
must never be called from multiple threads at once.

**Caution:** Different Android-powered devices
may have different hardware specifications, such as megapixel ratings and
auto-focus capabilities. In order for your application to be compatible with
more devices, you should not make assumptions about the device camera
specifications.

### Developer Guides

For more information about using cameras, read the
[Camera](https://developer.android.com/guide/topics/media/camera) developer guide.

<br />

## Summary

| ### Nested classes ||
|---|---|
| ` class` | `https://developer.android.com/reference/android/hardware/Camera.Area` *This class was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` interface` | `https://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback` *This interface was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` interface` | `https://developer.android.com/reference/android/hardware/Camera.AutoFocusMoveCallback` *This interface was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` class` | `https://developer.android.com/reference/android/hardware/Camera.CameraInfo` *This class was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` interface` | `https://developer.android.com/reference/android/hardware/Camera.ErrorCallback` *This interface was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` class` | `https://developer.android.com/reference/android/hardware/Camera.Face` *This class was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` interface` | `https://developer.android.com/reference/android/hardware/Camera.FaceDetectionListener` *This interface was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` interface` | `https://developer.android.com/reference/android/hardware/Camera.OnZoomChangeListener` *This interface was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` class` | `https://developer.android.com/reference/android/hardware/Camera.Parameters` *This class was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` interface` | `https://developer.android.com/reference/android/hardware/Camera.PictureCallback` *This interface was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` interface` | `https://developer.android.com/reference/android/hardware/Camera.PreviewCallback` *This interface was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` interface` | `https://developer.android.com/reference/android/hardware/Camera.ShutterCallback` *This interface was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |
| ` class` | `https://developer.android.com/reference/android/hardware/Camera.Size` *This class was deprecated in API level 21. We recommend using the new `https://developer.android.com/reference/android/hardware/camera2/package-summary` API for new applications.* |

| ### Constants ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/hardware/Camera#ACTION_NEW_PICTURE` Broadcast Action: A new picture is taken by the camera, and the entry of the picture has been added to the media store. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/hardware/Camera#ACTION_NEW_VIDEO` Broadcast Action: A new video is recorded by the camera, and the entry of the video has been added to the media store. |
| `int` | `https://developer.android.com/reference/android/hardware/Camera#CAMERA_ERROR_EVICTED` Camera was disconnected due to use by higher priority user. |
| `int` | `https://developer.android.com/reference/android/hardware/Camera#CAMERA_ERROR_SERVER_DIED` Media server died. |
| `int` | `https://developer.android.com/reference/android/hardware/Camera#CAMERA_ERROR_UNKNOWN` Unspecified camera error. |

| ### Public methods ||
|---|---|
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#addCallbackBuffer(byte[])(byte[] callbackBuffer) ` Adds a pre-allocated buffer to the preview callback buffer queue. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#autoFocus(android.hardware.Camera.AutoFocusCallback)(https://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback cb) ` Starts camera auto-focus and registers a callback function to run when the camera is focused. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#cancelAutoFocus()() ` Cancels any auto-focus function in progress. |
| ` final boolean` | ` https://developer.android.com/reference/android/hardware/Camera#enableShutterSound(boolean)(boolean enabled) ` <br /> Enable or disable the default shutter sound when taking a picture. |
| ` static void` | ` https://developer.android.com/reference/android/hardware/Camera#getCameraInfo(int,%20android.hardware.Camera.CameraInfo)(int cameraId, https://developer.android.com/reference/android/hardware/Camera.CameraInfo cameraInfo) ` Returns the information about a particular camera. |
| ` static int` | ` https://developer.android.com/reference/android/hardware/Camera#getNumberOfCameras()() ` Returns the number of physical cameras available on this device. |
| ` https://developer.android.com/reference/android/hardware/Camera.Parameters` | ` https://developer.android.com/reference/android/hardware/Camera#getParameters()() ` Returns the current settings for this Camera service. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#lock()() ` Re-locks the camera to prevent other processes from accessing it. |
| ` static https://developer.android.com/reference/android/hardware/Camera` | ` https://developer.android.com/reference/android/hardware/Camera#open()() ` Creates a new Camera object to access the first back-facing camera on the device. |
| ` static https://developer.android.com/reference/android/hardware/Camera` | ` https://developer.android.com/reference/android/hardware/Camera#open(int)(int cameraId) ` Creates a new Camera object to access a particular hardware camera. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#reconnect()() ` Reconnects to the camera service after another process used it. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#release()() ` Disconnects and releases the Camera object resources. |
| ` void` | ` https://developer.android.com/reference/android/hardware/Camera#setAutoFocusMoveCallback(android.hardware.Camera.AutoFocusMoveCallback)(https://developer.android.com/reference/android/hardware/Camera.AutoFocusMoveCallback cb) ` Sets camera auto-focus move callback. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#setDisplayOrientation(int)(int degrees) ` Set the clockwise rotation of preview display in degrees. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#setErrorCallback(android.hardware.Camera.ErrorCallback)(https://developer.android.com/reference/android/hardware/Camera.ErrorCallback cb) ` Registers a callback to be invoked when an error occurs. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#setFaceDetectionListener(android.hardware.Camera.FaceDetectionListener)(https://developer.android.com/reference/android/hardware/Camera.FaceDetectionListener listener) ` Registers a listener to be notified about the faces detected in the preview frame. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback)(https://developer.android.com/reference/android/hardware/Camera.PreviewCallback cb) ` <br /> Installs a callback to be invoked for the next preview frame in addition to displaying it on the screen. |
| ` void` | ` https://developer.android.com/reference/android/hardware/Camera#setParameters(android.hardware.Camera.Parameters)(https://developer.android.com/reference/android/hardware/Camera.Parameters params) ` Changes the settings for this Camera service. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#setPreviewCallback(android.hardware.Camera.PreviewCallback)(https://developer.android.com/reference/android/hardware/Camera.PreviewCallback cb) ` <br /> Installs a callback to be invoked for every preview frame in addition to displaying them on the screen. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#setPreviewCallbackWithBuffer(android.hardware.Camera.PreviewCallback)(https://developer.android.com/reference/android/hardware/Camera.PreviewCallback cb) ` <br /> Installs a callback to be invoked for every preview frame, using buffers supplied with `https://developer.android.com/reference/android/hardware/Camera#addCallbackBuffer(byte[])`, in addition to displaying them on the screen. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#setPreviewDisplay(android.view.SurfaceHolder)(https://developer.android.com/reference/android/view/SurfaceHolder holder) ` Sets the `https://developer.android.com/reference/android/view/Surface` to be used for live preview. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#setPreviewTexture(android.graphics.SurfaceTexture)(https://developer.android.com/reference/android/graphics/SurfaceTexture surfaceTexture) ` Sets the `https://developer.android.com/reference/android/graphics/SurfaceTexture` to be used for live preview. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#setZoomChangeListener(android.hardware.Camera.OnZoomChangeListener)(https://developer.android.com/reference/android/hardware/Camera.OnZoomChangeListener listener) ` Registers a listener to be notified when the zoom value is updated by the camera driver during smooth zoom. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#startFaceDetection()() ` Starts the face detection. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#startPreview()() ` Starts capturing and drawing preview frames to the screen. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#startSmoothZoom(int)(int value) ` Zooms to the requested value smoothly. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#stopFaceDetection()() ` Stops the face detection. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#stopPreview()() ` Stops capturing and drawing preview frames to the surface, and resets the camera for a future call to `https://developer.android.com/reference/android/hardware/Camera#startPreview()`. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#stopSmoothZoom()() ` Stops the smooth zoom. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback)(https://developer.android.com/reference/android/hardware/Camera.ShutterCallback shutter, https://developer.android.com/reference/android/hardware/Camera.PictureCallback raw, https://developer.android.com/reference/android/hardware/Camera.PictureCallback postview, https://developer.android.com/reference/android/hardware/Camera.PictureCallback jpeg) ` Triggers an asynchronous image capture. |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback)(https://developer.android.com/reference/android/hardware/Camera.ShutterCallback shutter, https://developer.android.com/reference/android/hardware/Camera.PictureCallback raw, https://developer.android.com/reference/android/hardware/Camera.PictureCallback jpeg) ` Equivalent to ``` takePicture(Shutter, raw, null, jpeg) ``` . <br /> |
| ` final void` | ` https://developer.android.com/reference/android/hardware/Camera#unlock()() ` Unlocks the camera to allow another process to access it. |

| ### Protected methods ||
|---|---|
| ` void` | ` https://developer.android.com/reference/android/hardware/Camera#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. |

| ### Inherited methods |
|---|---|
| From class ` https://developer.android.com/reference/java/lang/Object ` |---|---| | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/Object#clone()() ` Creates and returns a copy of this object. | | ` boolean` | ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) ` Indicates whether some other object is "equal to" this one. | | ` void` | ` https://developer.android.com/reference/java/lang/Object#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | | ` final https://developer.android.com/reference/java/lang/Class<?>` | ` https://developer.android.com/reference/java/lang/Object#getClass()() ` Returns the runtime class of this `Object`. | | ` int` | ` https://developer.android.com/reference/java/lang/Object#hashCode()() ` Returns a hash code value for the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notify()() ` Wakes up a single thread that is waiting on this object's monitor. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notifyAll()() ` Wakes up all threads that are waiting on this object's monitor. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/lang/Object#toString()() ` Returns a string representation of the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait()() ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*. | ||

## Constants

### ACTION_NEW_PICTURE

Added in [API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String ACTION_NEW_PICTURE
```

Broadcast Action: A new picture is taken by the camera, and the entry of
the picture has been added to the media store.
`https://developer.android.com/reference/android/content/Intent#getData()` is URI of the picture.

In `https://developer.android.com/reference/android/os/Build.VERSION_CODES#N` this broadcast was removed, and
applications are recommended to use
`https://developer.android.com/reference/android/app/job/JobInfo.Builder`.`https://developer.android.com/reference/android/app/job/JobInfo.Builder#addTriggerContentUri(android.app.job.JobInfo.TriggerContentUri)`
instead.

In `https://developer.android.com/reference/android/os/Build.VERSION_CODES#O` this broadcast has been brought
back, but only for *registered* receivers. Apps that are actively running can
again listen to the broadcast if they want an immediate clear signal about a picture
being taken, however anything doing heavy work (or needing to be launched) as a result of
this should still use JobScheduler.

<br />

<br />

Constant Value:

"android.hardware.action.NEW_PICTURE"


### ACTION_NEW_VIDEO

Added in [API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String ACTION_NEW_VIDEO
```

Broadcast Action: A new video is recorded by the camera, and the entry
of the video has been added to the media store.
`https://developer.android.com/reference/android/content/Intent#getData()` is URI of the video.

In `https://developer.android.com/reference/android/os/Build.VERSION_CODES#N` this broadcast was removed, and
applications are recommended to use
`https://developer.android.com/reference/android/app/job/JobInfo.Builder`.`https://developer.android.com/reference/android/app/job/JobInfo.Builder#addTriggerContentUri(android.app.job.JobInfo.TriggerContentUri)`
instead.

In `https://developer.android.com/reference/android/os/Build.VERSION_CODES#O` this broadcast has been brought
back, but only for *registered* receivers. Apps that are actively running can
again listen to the broadcast if they want an immediate clear signal about a video
being taken, however anything doing heavy work (or needing to be launched) as a result of
this should still use JobScheduler.

<br />

<br />

Constant Value:

"android.hardware.action.NEW_VIDEO"


### CAMERA_ERROR_EVICTED

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CAMERA_ERROR_EVICTED
```

Camera was disconnected due to use by higher priority user.

<br />

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera.ErrorCallback`

Constant Value:

2
(0x00000002)


### CAMERA_ERROR_SERVER_DIED

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CAMERA_ERROR_SERVER_DIED
```

Media server died. In this case, the application must release the
Camera object and instantiate a new one.

<br />

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera.ErrorCallback`

Constant Value:

100
(0x00000064)


### CAMERA_ERROR_UNKNOWN

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CAMERA_ERROR_UNKNOWN
```

Unspecified camera error.

<br />

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera.ErrorCallback`

Constant Value:

1
(0x00000001)


## Public methods

### addCallbackBuffer

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void addCallbackBuffer (byte[] callbackBuffer)
```

Adds a pre-allocated buffer to the preview callback buffer queue.
Applications can add one or more buffers to the queue. When a preview
frame arrives and there is still at least one available buffer, the
buffer will be used and removed from the queue. Then preview callback is
invoked with the buffer. If a frame arrives and there is no buffer left,
the frame is discarded. Applications should add buffers back when they
finish processing the data in them.

For formats besides YV12, the size of the buffer is determined by
multiplying the preview image width, height, and bytes per pixel. The
width and height can be read from
`https://developer.android.com/reference/android/hardware/Camera.Parameters#getPreviewSize()`. Bytes per pixel can be
computed from `https://developer.android.com/reference/android/graphics/ImageFormat#getBitsPerPixel(int)` /
8, using the image format from
`https://developer.android.com/reference/android/hardware/Camera.Parameters#getPreviewFormat()`.

If using the `https://developer.android.com/reference/android/graphics/ImageFormat#YV12` format, the
size can be calculated using the equations listed in
`https://developer.android.com/reference/android/hardware/Camera.Parameters#setPreviewFormat(int)`.

This method is only necessary when
`https://developer.android.com/reference/android/hardware/Camera#setPreviewCallbackWithBuffer(android.hardware.Camera.PreviewCallback)` is used. When
`https://developer.android.com/reference/android/hardware/Camera#setPreviewCallback(android.hardware.Camera.PreviewCallback)` or
`https://developer.android.com/reference/android/hardware/Camera#setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback)` are used, buffers
are automatically allocated. When a supplied buffer is too small to
hold the preview frame data, preview callback will return null and
the buffer will be removed from the buffer queue.

<br />

| Parameters ||
|---|---|
| `callbackBuffer` | `byte`: the buffer to add to the queue. The size of the buffer must match the values described above. <br /> |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#setPreviewCallbackWithBuffer(android.hardware.Camera.PreviewCallback)`

### autoFocus

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void autoFocus (Camera.AutoFocusCallback cb)
```

Starts camera auto-focus and registers a callback function to run when
the camera is focused. This method is only valid when preview is active
(between `https://developer.android.com/reference/android/hardware/Camera#startPreview()` and before `https://developer.android.com/reference/android/hardware/Camera#stopPreview()`).

Callers should check
`https://developer.android.com/reference/android/hardware/Camera.Parameters#getFocusMode()` to determine if
this method should be called. If the camera does not support auto-focus,
it is a no-op and `https://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback#onAutoFocus(boolean,%20android.hardware.Camera)`
callback will be called immediately.

If your application should not be installed
on devices without auto-focus, you must declare that your application
uses auto-focus with the
[\<uses-feature\>](https://developer.android.com/guide/topics/manifest/uses-feature-element)
manifest element.

If the current flash mode is not
`https://developer.android.com/reference/android/hardware/Camera.Parameters#FLASH_MODE_OFF`, flash may be
fired during auto-focus, depending on the driver and camera hardware.


Auto-exposure lock `https://developer.android.com/reference/android/hardware/Camera.Parameters#getAutoExposureLock()`
and auto-white balance locks `https://developer.android.com/reference/android/hardware/Camera.Parameters#getAutoWhiteBalanceLock()`
do not change during and after autofocus. But auto-focus routine may stop
auto-exposure and auto-white balance transiently during focusing.

Stopping preview with `https://developer.android.com/reference/android/hardware/Camera#stopPreview()`, or triggering still
image capture with `https://developer.android.com/reference/android/hardware/Camera#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback)`, will not change the
the focus position. Applications must call cancelAutoFocus to reset the
focus.

If autofocus is successful, consider using
`https://developer.android.com/reference/android/media/MediaActionSound` to properly play back an autofocus
success sound to the user.

<br />

<br />

| Parameters ||
|---|---|
| `cb` | `Camera.AutoFocusCallback`: the callback to run <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if starting autofocus fails; usually this would be because of a hardware or other low-level error, or because release() has been called on this Camera instance. |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#cancelAutoFocus()`
- `https://developer.android.com/reference/android/hardware/Camera.Parameters#setAutoExposureLock(boolean)`
- `https://developer.android.com/reference/android/hardware/Camera.Parameters#setAutoWhiteBalanceLock(boolean)`
- `https://developer.android.com/reference/android/media/MediaActionSound`

### cancelAutoFocus

Added in [API level 5](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void cancelAutoFocus ()
```

Cancels any auto-focus function in progress.
Whether or not auto-focus is currently in progress,
this function will return the focus position to the default.
If the camera does not support auto-focus, this is a no-op.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if canceling autofocus fails; usually this would be because of a hardware or other low-level error, or because release() has been called on this Camera instance. |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#autoFocus(android.hardware.Camera.AutoFocusCallback)`

### enableShutterSound

Added in [API level 17](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final boolean enableShutterSound (boolean enabled)
```

<br />

Enable or disable the default shutter sound when taking a picture.

By default, the camera plays the system-defined camera shutter sound
when `https://developer.android.com/reference/android/hardware/Camera#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback)` is called. Using this method, the shutter sound
can be disabled. It is strongly recommended that an alternative shutter
sound is played in the `https://developer.android.com/reference/android/hardware/Camera.ShutterCallback` when the system shutter
sound is disabled.

Note that devices may not always allow disabling the camera shutter
sound. If the shutter sound state cannot be set to the desired value,
this method will return false. `https://developer.android.com/reference/android/hardware/Camera.CameraInfo#canDisableShutterSound`
can be used to determine whether the device will allow the shutter sound
to be disabled.

<br />

<br />

| Parameters ||
|---|---|
| `enabled` | `boolean`: whether the camera should play the system shutter sound when `https://developer.android.com/reference/android/hardware/Camera#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback)` is called. <br /> |

| Returns ||
|---|---|
| `boolean` | `true` if the shutter sound state was successfully changed. `false` if the shutter sound state could not be changed. `true` is also returned if shutter sound playback is already set to the requested state. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if the call fails; usually this would be because of a hardware or other low-level error, or because release() has been called on this Camera instance. |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback)`
- `https://developer.android.com/reference/android/hardware/Camera.CameraInfo#canDisableShutterSound`
- `https://developer.android.com/reference/android/hardware/Camera.ShutterCallback`

### getCameraInfo

Added in [API level 9](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static void getCameraInfo (int cameraId, 
                Camera.CameraInfo cameraInfo)
```

Returns the information about a particular camera.
If `https://developer.android.com/reference/android/hardware/Camera#getNumberOfCameras()` returns N, the valid id is 0 to N-1.

<br />

| Parameters ||
|---|---|
| `cameraId` | `int` <br /> |
| `cameraInfo` | `Camera.CameraInfo` <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if an invalid ID is provided, or if there is an error retrieving the information (generally due to a hardware or other low-level failure). |

### getNumberOfCameras

Added in [API level 9](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static int getNumberOfCameras ()
```

Returns the number of physical cameras available on this device.
The return value of this method might change dynamically if the device
supports external cameras and an external camera is connected or
disconnected.

If there is a
`https://developer.android.com/reference/android/hardware/camera2/CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA` in the system, to maintain app backward compatibility, this method will
only expose one camera per facing for all logical camera and physical camera groups.
Use camera2 API to see all cameras.

<br />

| Returns ||
|---|---|
| `int` | total number of accessible camera devices, or 0 if there are no cameras or an error was encountered enumerating them. <br /> |

### getParameters

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Camera.Parameters getParameters ()
```

Returns the current settings for this Camera service.
If modifications are made to the returned Parameters, they must be passed
to `https://developer.android.com/reference/android/hardware/Camera#setParameters(android.hardware.Camera.Parameters)` to take effect.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/hardware/Camera.Parameters` | <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if reading parameters fails; usually this would be because of a hardware or other low-level error, or because release() has been called on this Camera instance. |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#setParameters(android.hardware.Camera.Parameters)`

### lock

Added in [API level 5](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void lock ()
```

Re-locks the camera to prevent other processes from accessing it.
Camera objects are locked by default unless `https://developer.android.com/reference/android/hardware/Camera#unlock()` is
called. Normally `https://developer.android.com/reference/android/hardware/Camera#reconnect()` is used instead.

Since API level 14, camera is automatically locked for applications in
`https://developer.android.com/reference/android/media/MediaRecorder#start()`. Applications can use the
camera (ex: zoom) after recording starts. There is no need to call this
after recording starts or stops.

If you are not recording video, you probably do not need this method.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if the camera cannot be re-locked (for example, if the camera is still in use by another process). |

### open

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static Camera open ()
```

Creates a new Camera object to access the first back-facing camera on the
device. If the device does not have a back-facing camera, this returns
null. Otherwise acts like the `https://developer.android.com/reference/android/hardware/Camera#open(int)` call.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/hardware/Camera` | a new Camera object for the first back-facing camera, or null if there is no backfacing camera <br /> |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#open(int)`

### open

Added in [API level 9](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static Camera open (int cameraId)
```

Creates a new Camera object to access a particular hardware camera. If
the same camera is opened by other applications, this will throw a
RuntimeException.

You must call `https://developer.android.com/reference/android/hardware/Camera#release()` when you are done using the camera,
otherwise it will remain locked and be unavailable to other applications.

Your application should only have one Camera object active at a time
for a particular hardware camera.

Callbacks from other methods are delivered to the event loop of the
thread which called open(). If this thread has no event loop, then
callbacks are delivered to the main application event loop. If there
is no main application event loop, callbacks are not delivered.

**Caution:** On some devices, this method may
take a long time to complete. It is best to call this method from a
worker thread (possibly using `https://developer.android.com/reference/android/os/AsyncTask`) to avoid
blocking the main application UI thread.

<br />

| Parameters ||
|---|---|
| `cameraId` | `int`: the hardware camera to access, between 0 and `https://developer.android.com/reference/android/hardware/Camera#getNumberOfCameras()`-1. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/hardware/Camera` | a new Camera object, connected, locked and ready for use. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if opening the camera fails (for example, if the camera is in use by another process or device policy manager has disabled the camera). |

**See also:**

- `https://developer.android.com/reference/android/app/admin/DevicePolicyManager#getCameraDisabled(android.content.ComponentName)`

### reconnect

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void reconnect ()
```

Reconnects to the camera service after another process used it.
After `https://developer.android.com/reference/android/hardware/Camera#unlock()` is called, another process may use the
camera; when the process is done, you must reconnect to the camera,
which will re-acquire the lock and allow you to continue using the
camera.

Since API level 14, camera is automatically locked for applications in
`https://developer.android.com/reference/android/media/MediaRecorder#start()`. Applications can use the
camera (ex: zoom) after recording starts. There is no need to call this
after recording starts or stops.

If you are not recording video, you probably do not need this method.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if a connection cannot be re-established (for example, if the camera is still in use by another process). |
| `https://developer.android.com/reference/java/lang/RuntimeException` | if release() has been called on this Camera instance. |

### release

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void release ()
```

Disconnects and releases the Camera object resources.

You must call this as soon as you're done with the Camera object.

<br />

<br />

### setAutoFocusMoveCallback

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setAutoFocusMoveCallback (Camera.AutoFocusMoveCallback cb)
```

Sets camera auto-focus move callback.

<br />

| Parameters ||
|---|---|
| `cb` | `Camera.AutoFocusMoveCallback`: the callback to run <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if enabling the focus move callback fails; usually this would be because of a hardware or other low-level error, or because release() has been called on this Camera instance. |

### setDisplayOrientation

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void setDisplayOrientation (int degrees)
```

Set the clockwise rotation of preview display in degrees. This affects
the preview frames and the picture displayed after snapshot. This method
is useful for portrait mode applications. Note that preview display of
front-facing cameras is flipped horizontally before the rotation, that
is, the image is reflected along the central vertical axis of the camera
sensor. So the users can see themselves as looking into a mirror.

This does not affect the order of byte array passed in `https://developer.android.com/reference/android/hardware/Camera.PreviewCallback#onPreviewFrame(byte[],%20android.hardware.Camera)`, JPEG pictures, or recorded videos. This
method is not allowed to be called during preview.

If you want to make the camera image show in the same orientation as
the display, you can use the following code.

```
 public static void setCameraDisplayOrientation(Activity activity,
         int cameraId, android.hardware.Camera camera) {
     android.hardware.Camera.CameraInfo info =
             new android.hardware.Camera.CameraInfo();
     android.hardware.Camera.getCameraInfo(cameraId, info);
     int rotation = activity.getWindowManager().getDefaultDisplay()
             .getRotation();
     int degrees = 0;
     switch (rotation) {
         case Surface.ROTATION_0: degrees = 0; break;
         case Surface.ROTATION_90: degrees = 90; break;
         case Surface.ROTATION_180: degrees = 180; break;
         case Surface.ROTATION_270: degrees = 270; break;
     }

     int result;
     if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
         result = (info.orientation + degrees) % 360;
         result = (360 - result) % 360;  // compensate the mirror
     } else {  // back-facing
         result = (info.orientation - degrees + 360) % 360;
     }
     camera.setDisplayOrientation(result);
 }
 
```

Starting from API level 14, this method can be called when preview is
active.

**Note:**Before API level 24, the default value for orientation is 0. Starting in
API level 24, the default orientation will be such that applications in forced-landscape mode
will have correct preview orientation, which may be either a default of 0 or
180. Applications that operate in portrait mode or allow for changing orientation must still
call this method after each orientation change to ensure correct preview display in all
cases.

<br />

<br />

| Parameters ||
|---|---|
| `degrees` | `int`: the angle that the picture will be rotated clockwise. Valid values are 0, 90, 180, and 270. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if setting orientation fails; usually this would be because of a hardware or other low-level error, or because release() has been called on this Camera instance. |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#setPreviewDisplay(android.view.SurfaceHolder)`

### setErrorCallback

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void setErrorCallback (Camera.ErrorCallback cb)
```

Registers a callback to be invoked when an error occurs.

<br />

| Parameters ||
|---|---|
| `cb` | `Camera.ErrorCallback`: The callback to run <br /> |

### setFaceDetectionListener

Added in [API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void setFaceDetectionListener (Camera.FaceDetectionListener listener)
```

Registers a listener to be notified about the faces detected in the
preview frame.

<br />

| Parameters ||
|---|---|
| `listener` | `Camera.FaceDetectionListener`: the listener to notify <br /> |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#startFaceDetection()`

### setOneShotPreviewCallback

Added in [API level 3](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void setOneShotPreviewCallback (Camera.PreviewCallback cb)
```

<br />

Installs a callback to be invoked for the next preview frame in
addition to displaying it on the screen. After one invocation, the
callback is cleared. This method can be called any time, even when
preview is live. Any other preview callbacks are overridden.

If you are using the preview data to create video or still images,
strongly consider using `https://developer.android.com/reference/android/media/MediaActionSound` to
properly indicate image capture or recording start/stop to the user.

<br />

<br />

| Parameters ||
|---|---|
| `cb` | `Camera.PreviewCallback`: a callback object that receives a copy of the next preview frame, or null to stop receiving callbacks. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if release() has been called on this Camera instance. |

**See also:**

- `https://developer.android.com/reference/android/media/MediaActionSound`

### setParameters

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setParameters (Camera.Parameters params)
```

Changes the settings for this Camera service.

<br />

| Parameters ||
|---|---|
| `params` | `Camera.Parameters`: the Parameters to use for this Camera service <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if any parameter is invalid or not supported. |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#getParameters()`

### setPreviewCallback

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void setPreviewCallback (Camera.PreviewCallback cb)
```

<br />

Installs a callback to be invoked for every preview frame in addition
to displaying them on the screen. The callback will be repeatedly called
for as long as preview is active. This method can be called at any time,
even while preview is live. Any other preview callbacks are
overridden.

If you are using the preview data to create video or still images,
strongly consider using `https://developer.android.com/reference/android/media/MediaActionSound` to
properly indicate image capture or recording start/stop to the user.

<br />

<br />

| Parameters ||
|---|---|
| `cb` | `Camera.PreviewCallback`: a callback object that receives a copy of each preview frame, or null to stop receiving callbacks. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if release() has been called on this Camera instance. |

**See also:**

- `https://developer.android.com/reference/android/media/MediaActionSound`

### setPreviewCallbackWithBuffer

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void setPreviewCallbackWithBuffer (Camera.PreviewCallback cb)
```

<br />

Installs a callback to be invoked for every preview frame, using
buffers supplied with `https://developer.android.com/reference/android/hardware/Camera#addCallbackBuffer(byte[])`, in addition to
displaying them on the screen. The callback will be repeatedly called
for as long as preview is active and buffers are available. Any other
preview callbacks are overridden.

The purpose of this method is to improve preview efficiency and frame
rate by allowing preview frame memory reuse. You must call
`https://developer.android.com/reference/android/hardware/Camera#addCallbackBuffer(byte[])` at some point -- before or after
calling this method -- or no callbacks will received.

The buffer queue will be cleared if this method is called with a null
callback, `https://developer.android.com/reference/android/hardware/Camera#setPreviewCallback(android.hardware.Camera.PreviewCallback)` is called,
or `https://developer.android.com/reference/android/hardware/Camera#setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback)` is
called.

If you are using the preview data to create video or still images,
strongly consider using `https://developer.android.com/reference/android/media/MediaActionSound` to
properly indicate image capture or recording start/stop to the user.

<br />

<br />

| Parameters ||
|---|---|
| `cb` | `Camera.PreviewCallback`: a callback object that receives a copy of the preview frame, or null to stop receiving callbacks and clear the buffer queue. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if release() has been called on this Camera instance. |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#addCallbackBuffer(byte[])`
- `https://developer.android.com/reference/android/media/MediaActionSound`

### setPreviewDisplay

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void setPreviewDisplay (SurfaceHolder holder)
```

Sets the `https://developer.android.com/reference/android/view/Surface` to be used for live preview.
Either a surface or surface texture is necessary for preview, and
preview is necessary to take pictures. The same surface can be re-set
without harm. Setting a preview surface will un-set any preview surface
texture that was set via `https://developer.android.com/reference/android/hardware/Camera#setPreviewTexture(android.graphics.SurfaceTexture)`.

The `https://developer.android.com/reference/android/view/SurfaceHolder` must already contain a surface when this
method is called. If you are using `https://developer.android.com/reference/android/view/SurfaceView`,
you will need to register a `https://developer.android.com/reference/android/view/SurfaceHolder.Callback` with
`https://developer.android.com/reference/android/view/SurfaceHolder#addCallback(android.view.SurfaceHolder.Callback)` and wait for
`https://developer.android.com/reference/android/view/SurfaceHolder.Callback#surfaceCreated(android.view.SurfaceHolder)` before
calling setPreviewDisplay() or starting preview.

This method must be called before `https://developer.android.com/reference/android/hardware/Camera#startPreview()`. The
one exception is that if the preview surface is not set (or set to null)
before startPreview() is called, then this method may be called once
with a non-null parameter to set the preview surface. (This allows
camera setup and surface creation to happen in parallel, saving time.)
The preview surface may not otherwise change while preview is running.

<br />

| Parameters ||
|---|---|
| `holder` | `SurfaceHolder`: containing the Surface on which to place the preview, or null to remove the preview surface <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if the method fails (for example, if the surface is unavailable or unsuitable). |
| `https://developer.android.com/reference/java/lang/RuntimeException` | if release() has been called on this Camera instance. |

### setPreviewTexture

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void setPreviewTexture (SurfaceTexture surfaceTexture)
```

Sets the `https://developer.android.com/reference/android/graphics/SurfaceTexture` to be used for live preview.
Either a surface or surface texture is necessary for preview, and
preview is necessary to take pictures. The same surface texture can be
re-set without harm. Setting a preview surface texture will un-set any
preview surface that was set via `https://developer.android.com/reference/android/hardware/Camera#setPreviewDisplay(android.view.SurfaceHolder)`.

This method must be called before `https://developer.android.com/reference/android/hardware/Camera#startPreview()`. The
one exception is that if the preview surface texture is not set (or set
to null) before startPreview() is called, then this method may be called
once with a non-null parameter to set the preview surface. (This allows
camera setup and surface creation to happen in parallel, saving time.)
The preview surface texture may not otherwise change while preview is
running.

The timestamps provided by `https://developer.android.com/reference/android/graphics/SurfaceTexture#getTimestamp()` for a
SurfaceTexture set as the preview texture have an unspecified zero point,
and cannot be directly compared between different cameras or different
instances of the same camera, or across multiple runs of the same
program.

If you are using the preview data to create video or still images,
strongly consider using `https://developer.android.com/reference/android/media/MediaActionSound` to
properly indicate image capture or recording start/stop to the user.

<br />

<br />

| Parameters ||
|---|---|
| `surfaceTexture` | `SurfaceTexture`: the `https://developer.android.com/reference/android/graphics/SurfaceTexture` to which the preview images are to be sent or null to remove the current preview surface texture <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if the method fails (for example, if the surface texture is unavailable or unsuitable). |
| `https://developer.android.com/reference/java/lang/RuntimeException` | if release() has been called on this Camera instance. |

**See also:**

- `https://developer.android.com/reference/android/media/MediaActionSound`
- `https://developer.android.com/reference/android/graphics/SurfaceTexture`
- `https://developer.android.com/reference/android/view/TextureView`

### setZoomChangeListener

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void setZoomChangeListener (Camera.OnZoomChangeListener listener)
```

Registers a listener to be notified when the zoom value is updated by the
camera driver during smooth zoom.

<br />

| Parameters ||
|---|---|
| `listener` | `Camera.OnZoomChangeListener`: the listener to notify <br /> |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#startSmoothZoom(int)`

### startFaceDetection

Added in [API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void startFaceDetection ()
```

Starts the face detection. This should be called after preview is started.
The camera will notify `https://developer.android.com/reference/android/hardware/Camera.FaceDetectionListener` of the detected
faces in the preview frame. The detected faces may be the same as the
previous ones. Applications should call `https://developer.android.com/reference/android/hardware/Camera#stopFaceDetection()` to
stop the face detection. This method is supported if `https://developer.android.com/reference/android/hardware/Camera.Parameters#getMaxNumDetectedFaces()` returns a number larger than 0.
If the face detection has started, apps should not call this again.

When the face detection is running, `https://developer.android.com/reference/android/hardware/Camera.Parameters#setWhiteBalance(java.lang.String)`,
`https://developer.android.com/reference/android/hardware/Camera.Parameters#setFocusAreas(java.util.List<android.hardware.Camera.Area>)`, and `https://developer.android.com/reference/android/hardware/Camera.Parameters#setMeteringAreas(java.util.List<android.hardware.Camera.Area>)`
have no effect. The camera uses the detected faces to do auto-white balance,
auto exposure, and autofocus.

If the apps call `https://developer.android.com/reference/android/hardware/Camera#autoFocus(android.hardware.Camera.AutoFocusCallback)`, the camera
will stop sending face callbacks. The last face callback indicates the
areas used to do autofocus. After focus completes, face detection will
resume sending face callbacks. If the apps call `https://developer.android.com/reference/android/hardware/Camera#cancelAutoFocus()`, the face callbacks will also resume.

After calling `https://developer.android.com/reference/android/hardware/Camera#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback)` or `https://developer.android.com/reference/android/hardware/Camera#stopPreview()`, and then resuming
preview with `https://developer.android.com/reference/android/hardware/Camera#startPreview()`, the apps should call this method
again to resume face detection.

<br />

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if the face detection is unsupported. |
| `https://developer.android.com/reference/java/lang/RuntimeException` | if the method fails or the face detection is already running. |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera.FaceDetectionListener`
- `https://developer.android.com/reference/android/hardware/Camera#stopFaceDetection()`
- `https://developer.android.com/reference/android/hardware/Camera.Parameters#getMaxNumDetectedFaces()`

### startPreview

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void startPreview ()
```

Starts capturing and drawing preview frames to the screen.
Preview will not actually start until a surface is supplied
with `https://developer.android.com/reference/android/hardware/Camera#setPreviewDisplay(android.view.SurfaceHolder)` or
`https://developer.android.com/reference/android/hardware/Camera#setPreviewTexture(android.graphics.SurfaceTexture)`.

If `https://developer.android.com/reference/android/hardware/Camera#setPreviewCallback(android.hardware.Camera.PreviewCallback)`,
`https://developer.android.com/reference/android/hardware/Camera#setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback)`, or
`https://developer.android.com/reference/android/hardware/Camera#setPreviewCallbackWithBuffer(android.hardware.Camera.PreviewCallback)` were
called, `https://developer.android.com/reference/android/hardware/Camera.PreviewCallback#onPreviewFrame(byte[],%20android.hardware.Camera)`
will be called when preview data becomes available.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if starting preview fails; usually this would be because of a hardware or other low-level error, or because release() has been called on this Camera instance. The QCIF (176x144) exception mentioned in `https://developer.android.com/reference/android/hardware/Camera.Parameters#setPreviewSize(int,%20int)` and `https://developer.android.com/reference/android/hardware/Camera.Parameters#setPictureSize(int,%20int)` can also cause this exception be thrown. |

### startSmoothZoom

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void startSmoothZoom (int value)
```

Zooms to the requested value smoothly. The driver will notify `https://developer.android.com/reference/android/hardware/Camera.OnZoomChangeListener` of the zoom value and whether zoom is stopped at
the time. For example, suppose the current zoom is 0 and startSmoothZoom
is called with value 3. The
`https://developer.android.com/reference/android/hardware/Camera.OnZoomChangeListener#onZoomChange(int,%20boolean,%20android.hardware.Camera)`
method will be called three times with zoom values 1, 2, and 3.
Applications can call `https://developer.android.com/reference/android/hardware/Camera#stopSmoothZoom()` to stop the zoom earlier.
Applications should not call startSmoothZoom again or change the zoom
value before zoom stops. If the supplied zoom value equals to the current
zoom value, no zoom callback will be generated. This method is supported
if `https://developer.android.com/reference/android/hardware/Camera.Parameters#isSmoothZoomSupported()`
returns true.

<br />

| Parameters ||
|---|---|
| `value` | `int`: zoom value. The valid range is 0 to `https://developer.android.com/reference/android/hardware/Camera.Parameters#getMaxZoom()`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if the zoom value is invalid. |
| `https://developer.android.com/reference/java/lang/RuntimeException` | if the method fails. |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#setZoomChangeListener(android.hardware.Camera.OnZoomChangeListener)`

### stopFaceDetection

Added in [API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void stopFaceDetection ()
```

Stops the face detection.

<br />

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#startFaceDetection()`

### stopPreview

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void stopPreview ()
```

Stops capturing and drawing preview frames to the surface, and
resets the camera for a future call to `https://developer.android.com/reference/android/hardware/Camera#startPreview()`.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if stopping preview fails; usually this would be because of a hardware or other low-level error, or because release() has been called on this Camera instance. |

### stopSmoothZoom

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void stopSmoothZoom ()
```

Stops the smooth zoom. Applications should wait for the `https://developer.android.com/reference/android/hardware/Camera.OnZoomChangeListener` to know when the zoom is actually stopped. This
method is supported if `https://developer.android.com/reference/android/hardware/Camera.Parameters#isSmoothZoomSupported()` is true.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if the method fails. |

### takePicture

Added in [API level 5](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void takePicture (Camera.ShutterCallback shutter, 
                Camera.PictureCallback raw, 
                Camera.PictureCallback postview, 
                Camera.PictureCallback jpeg)
```

Triggers an asynchronous image capture. The camera service will initiate
a series of callbacks to the application as the image capture progresses.
The shutter callback occurs after the image is captured. This can be used
to trigger a sound to let the user know that image has been captured. The
raw callback occurs when the raw image data is available (NOTE: the data
will be null if there is no raw image callback buffer available or the
raw image callback buffer is not large enough to hold the raw image).
The postview callback occurs when a scaled, fully processed postview
image is available (NOTE: not all hardware supports this). The jpeg
callback occurs when the compressed image is available. If the
application does not need a particular callback, a null can be passed
instead of a callback method.

This method is only valid when preview is active (after
`https://developer.android.com/reference/android/hardware/Camera#startPreview()`). Preview will be stopped after the image is
taken; callers must call `https://developer.android.com/reference/android/hardware/Camera#startPreview()` again if they want to
re-start preview or take more pictures. This should not be called between
`https://developer.android.com/reference/android/media/MediaRecorder#start()` and
`https://developer.android.com/reference/android/media/MediaRecorder#stop()`.

After calling this method, you must not call `https://developer.android.com/reference/android/hardware/Camera#startPreview()`
or take another picture until the JPEG callback has returned.

<br />

| Parameters ||
|---|---|
| `shutter` | `Camera.ShutterCallback`: the callback for image capture moment, or null <br /> |
| `raw` | `Camera.PictureCallback`: the callback for raw (uncompressed) image data, or null <br /> |
| `postview` | `Camera.PictureCallback`: callback with postview image data, may be null <br /> |
| `jpeg` | `Camera.PictureCallback`: the callback for JPEG image data, or null <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if starting picture capture fails; usually this would be because of a hardware or other low-level error, or because release() has been called on this Camera instance. |

### takePicture

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void takePicture (Camera.ShutterCallback shutter, 
                Camera.PictureCallback raw, 
                Camera.PictureCallback jpeg)
```

Equivalent to

```
takePicture(Shutter, raw, null, jpeg)
```
.

<br />

<br />

| Parameters ||
|---|---|
| `shutter` | `Camera.ShutterCallback` <br /> |
| `raw` | `Camera.PictureCallback` <br /> |
| `jpeg` | `Camera.PictureCallback` <br /> |

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback)`

### unlock

Added in [API level 5](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final void unlock ()
```

Unlocks the camera to allow another process to access it.
Normally, the camera is locked to the process with an active Camera
object until `https://developer.android.com/reference/android/hardware/Camera#release()` is called. To allow rapid handoff
between processes, you can call this method to release the camera
temporarily for another process to use; once the other process is done
you can call `https://developer.android.com/reference/android/hardware/Camera#reconnect()` to reclaim the camera.

This must be done before calling
`https://developer.android.com/reference/android/media/MediaRecorder#setCamera(android.hardware.Camera)`. This cannot be
called after recording starts.

If you are not recording video, you probably do not need this method.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/RuntimeException` | if the camera cannot be unlocked. |

## Protected methods

### finalize

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected void finalize ()
```

Called by the garbage collector on an object when garbage collection
determines that there are no more references to the object.
A subclass overrides the `finalize` method to dispose of
system resources or to perform other cleanup.


The general contract of `finalize` is that it is invoked
if and when the Java virtual
machine has determined that there is no longer any
means by which this object can be accessed by any thread that has
not yet died, except as a result of an action taken by the
finalization of some other object or class which is ready to be
finalized. The `finalize` method may take any action, including
making this object available again to other threads; the usual purpose
of `finalize`, however, is to perform cleanup actions before
the object is irrevocably discarded. For example, the finalize method
for an object that represents an input/output connection might perform
explicit I/O transactions to break the connection before the object is
permanently discarded.


The `finalize` method of class `Object` performs no
special action; it simply returns normally. Subclasses of
`Object` may override this definition.


The Java programming language does not guarantee which thread will
invoke the `finalize` method for any given object. It is
guaranteed, however, that the thread that invokes finalize will not
be holding any user-visible synchronization locks when finalize is
invoked. If an uncaught exception is thrown by the finalize method,
the exception is ignored and finalization of that object terminates.


After the `finalize` method has been invoked for an object, no
further action is taken until the Java virtual machine has again
determined that there is no longer any means by which this object can
be accessed by any thread that has not yet died, including possible
actions by other objects or classes which are ready to be finalized,
at which point the object may be discarded.


The `finalize` method is never invoked more than once by a Java
virtual machine for any given object.


Any exception thrown by the `finalize` method causes
the finalization of this object to be halted, but is otherwise
ignored.

<br />