TP Icon 136

Android CameraX: Let’s take a selfie

Problem

With Android, using the camera has always been a bit of a challenge. After Google marked the old android.hardware.camera API as deprecated with Android 5 (Lollipop) due to insufficient functionality, the Camera2 API was introduced in return. Now, manufacturers and developers have been able to integrate even complex functions into the camera. In return, however, the effort and complexity of the implementation has also increased considerably.

Solution

To counter the increased complexity, the CameraX library was introduced at Google IO 2019, which is part of the Android Jetpack component set. CameraX is based on the Camera2 API and can be used from Android 5 and beyond. It implements the idea of use-cases to ensure a simple API. Currently, three use-cases are provided:

  • Preview: displays a preview of the images
  • Image analysis: provides access to a stream of images for subsequent processing
  • Image capture: stores images in high resolution

CameraX does not only offer various use cases, but also takes over the configuration of device-specific settings. Google provides its own test lab for this purpose, in which many different devices are tested automatically.

In addition, an optional add-on called "extensions" is provided, which enables access to device-specific effects (such as HDR, night, or potrait mode).

The following snippet shows how little effort is required to integrate the preview use case into the system. The result can be seen in the screenshot.

Android CameraX Preview-Use-Case

Example

private fun bindPreviewUseCase() {
    // Get screen metrics used to setup camera for full screen resolution
    val metrics = DisplayMetrics().also { textureView.display.getRealMetrics(it) }
    val screenAspectRatio = Rational(metrics.widthPixels, metrics.heightPixels)

    // Set up the view finder use case to display camera preview
    val viewFinderConfig = PreviewConfig.Builder().apply {
        setLensFacing(CameraX.LensFacing.FRONT)
        setTargetAspectRatio(screenAspectRatio)
        setTargetRotation(textureView.display.rotation)
    }.build()

    // Use the auto-fit preview builder to automatically handle size/orientation changes
    preview = AutoFitPreviewBuilder.build(viewFinderConfig, textureView)

    // Apply declared configs to CameraX using the same lifecycle owner
    CameraX.bindToLifecycle(viewLifecycleOwner, preview)
}
Android CameraX: Let’s take a selfie - jambit ToiletPaper

Wir verwenden Cookies, um unsere Webseite für Sie zu optimieren. Mit dem Besuch unserer Webseite erklären Sie sich damit einverstanden. // Our website is using cookies to improve your experience. By continuing to browse the site, you are agreeing to our use of cookies.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. // For more information, please refer to our privacy policy.