CameraState

public abstract class CameraState
extends Object

java.lang.Object
   ↳ androidx.camera.core.CameraState


Represents the different states the camera can be in.

The following table displays the states the camera can be in, and the possible transitions between them.

State Transition cause New State
CLOSED Received signal to open camera, and camera unavailable PENDING_OPEN
Received signal to open camera, and camera available OPENING
PENDING_OPEN Received signal that camera is available OPENING
OPENING Camera opened successfully OPEN
Camera encountered recoverable error while opening OPENING(Error)
Camera encountered critical error while opening CLOSING(Error)
Camera opening failed prematurely CLOSED(Error)
Reached max limit of camera (re)open attempts PENDING_OPEN
OPEN Camera encountered recoverable error OPENING(Error)
Camera encountered critical error CLOSING(Error)
Received signal to close camera CLOSING
CLOSING Camera closed CLOSED

Initially, a camera is in a CameraState.Type.CLOSED state. When it receives a signal to open, for example after one or multiple use cases are attached to it, its state moves to the CameraState.Type.OPENING state. If it successfully opens the camera device, its state moves to the CameraState.Type.OPEN state, otherwise, it may move to a different state depending on the error it encountered:

  • If opening the camera device fails prematurely, for example, when "Do Not Disturb" mode is enabled on a device that's affected by a bug in Android 9 (see ERROR_DO_NOT_DISTURB_MODE_ENABLED), the state moves to the CameraState.Type.CLOSED state .
  • If the error is recoverable, CameraX will attempt to reopen the camera device. If a recovery attempt succeeds, the camera state moves to the CameraState.Type.OPEN state, however, if all recovery attempts are unsuccessful, the camera waits in a CameraState.Type.PENDING_OPEN state to attempt recovery again once the camera device's availability changes.
  • If the error is critical, and requires the intervention of the developer or user, the camera's state moves to the CameraState.Type.CLOSING state.

While in the CameraState.Type.PENDING_OPEN state, the camera waits for a signal indicating the camera device's availability. The signal can either be an external one from the camera service, or an internal one from within CameraX. When received, the camera's state moves to the CameraState.Type.OPENING state, and an attempt to open the camera device is made.

While in the CameraState.Type.OPEN state, the camera device may be disconnected due to an error. In this case, depending on whether the error is critical or recoverable, CameraX may or may not attempt to recover from it, thus the state will move to either a CameraState.Type.CLOSING or CameraState.Type.OPENING state.

If the camera is in an CameraState.Type.OPEN state and receives a signal to close the camera device, for example when all its previously attached use cases are detached, its state moves to the CameraState.Type.CLOSING state. Once the camera device finishes closing, the camera state moves to the CameraState.Type.CLOSED state.

Whenever the camera encounters an error, it reports it through getError().

Summary

Nested classes

enum CameraState.ErrorType

Types of errors the camera can encounter. 

class CameraState.StateError

Error that the camera has encountered. 

enum CameraState.Type

States the camera can be in. 

Constants

int ERROR_CAMERA_DISABLED

An error indicating that the camera device could not be opened due to a device policy.

int ERROR_CAMER