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|
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
- 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.OPENstate, however, if all recovery attempts are unsuccessful, the camera waits in a
CameraState.Type.PENDING_OPENstate 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
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
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
Whenever the camera encounters an error, it reports it through
Types of errors the camera can encounter.
Error that the camera has encountered.
States the camera can be in.
An error indicating that the camera device could not be opened due to a device policy.