Skip to main content

Camera Errors

Why?

Since the Camera library is quite big, there is a lot that can "go wrong". VisionCamera provides thoroughly typed errors to help you quickly identify the cause and fix the problem.

switch (error.code) {
case "device/configuration-error":
// prompt user
break
case "device/microphone-unavailable":
// ask for permission
break
case "capture/recording-in-progress":
// stop recording
break
default:
console.error(error)
break
}

Troubleshooting

See Troubleshooting if you're having "weird issues".

The Error types

The CameraError type is a baseclass type for all other errors and provides the following properties:

  • code: A typed code in the form of {domain}/{code} that can be used to quickly identify and group errors
  • message: A non-localized message text that provides a more information and context about the error and possibly problematic values.
  • cause?: An ErrorWithCause instance that provides information about the cause of the error. (Optional)
    • cause.message: The message of the error that caused the camera error.
    • cause.code?: The native error's error-code. (iOS only)
    • cause.domain?: The native error's domain. (iOS only)
    • cause.details?: More dictionary-style information about the cause. (iOS only)
    • cause.stacktrace?: A native Java stacktrace for the cause. (Android only)
    • cause.cause?: The cause that caused this cause. (Recursive) (Optional)
note

See the CameraError.ts file for a list of all possible error codes

Runtime Errors

The CameraRuntimeError represents any kind of error that occured while mounting the Camera view, or an error that occured during the runtime.

The <Camera /> UI Component provides an onError function that will be invoked every time an unexpected runtime error occured.

function App() {
const onError = useCallback((error: CameraRuntimeError) => {
console.error(error)
}, [])

return <Camera onError={onError} {...cameraProps} />
}

Capture Errors

The CameraCaptureError represents any kind of error that occured only while taking a photo or recording a video.

function App() {
const camera = useRef<Camera>(null)

// called when the user presses a "capture" button
const onPress = useCallback(() => {
try {
const photo = await camera.current.takePhoto()
} catch (e) {
if (e instanceof CameraCaptureError) {
switch (e.code) {
case "capture/file-io-error":
console.error("Failed to write photo to disk!")
break
default:
console.error(e)
break
}
}
}
}, [camera])

return <Camera ref={camera} {...cameraProps} />
}

🚀 Next section: Troubleshooting