Lifecycle
The isActive
prop​
The Camera's isActive
property can be used to pause the session (isActive={false}
) while still keeping the session "warm". This is more desirable than completely unmounting the camera, since resuming the session (isActive={true}
) will be much faster than re-mounting the camera view.
For example, you want to pause the camera when the user navigates to another page or minimizes the app since otherwise the camera continues to run in the background without the user seeing it. Also, on iOS a green dot indicates the user that the camera is still active, possibly causing the user to raise privacy concerns. (See "About the orange and green indicators in your iPhone status bar")
For example, you might want to pause the Camera when the user minimizes the app (useAppState()
) or navigates to a new screen (useIsFocused()
):
function App() {
const isFocused = useIsFocused()
const appState = useAppState()
const isActive = isFocused && appState === "active"
return <Camera {...props} isActive={isActive} />
}
Events​
VisionCamera emits multiple lifecycle events inside a Camera session. In general, initialization happens first, and start/stop events are emitted later on in the timeline:
The onInitialized
event​
Once a Camera session has been initialized, the onInitialized
event will be fired.
All Camera functions (e.g. takePhoto()
) will be available immediately after the onInitialized
event has been fired.
The event will be fired everytime Camera outputs are re-created, which happens either if the device
changes or any output (e.g. photo
) is toggled on/off.
The onStarted
/onStopped
events​
After the Camera session is initialized it might or might not start streaming - depending on whether isActive
is true
or false
.
isActive={true}
: The session will start streaming. Once it has started streaming theonStarted
will be called.isActive={false}
: The session will stop streaming and eventually call theonStopped
event.
The onPreviewStarted
/onPreviewStopped
events​
Similar to the onStarted
/onStopped
events, onPreviewStarted
/onPreviewStopped
will be called when the Camera started or stopped streaming into the Preview View.
This might also happen when flipping Camera devices (e.g. from back -> front), as the Preview View momentarily stops streaming frames when switching devices.
The onError
event​
If the Camera encounters a runtime error, the onError
event will be fired.
It contains a CameraRuntimeError
with a code
and message
that describe the error.
See "Camera Errors" for more information.
Interruptions​
VisionCamera gracefully handles Camera interruptions such as incoming calls, phone overheating, a different app opening the Camera, etc., and will automatically resume the Camera once it becomes available again.