Camera intents

To perform basic camera actions like capturing a photo or video using the device's default camera application, you do not need to integrate with a Camera library . Instead, use an Intent .

Take a photo with a camera app

Android delegates actions to other applications by invoking an Intent . This process involves three pieces: the Intent itself, a call to start the external Activity , and some code to handle the image data when focus returns to your activity.

Here's a function that invokes an Intent to capture a photo.

Kotlin

val REQUEST_IMAGE_CAPTURE = 1
 
private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // display error state to the user
    }
}

Java

static final int REQUEST_IMAGE_CAPTURE = 1;
 
private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    } catch (ActivityNotFoundException e) {
        // display error state to the user
    }
}

Record a video with a camera app

You can also invoke an Intent to capture a video.

Kotlin

val REQUEST_VIDEO_CAPTURE = 1
 
private fun dispatchTakeVideoIntent() {
    Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
        takeVideoIntent.resolveActivity(packageManager)?.also {
            startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE)
        } ?: run {
          //display error state to the user
        }
    }
}

Java

static final int REQUEST_VIDEO_CAPTURE = 1;
 
private void dispatchTakeVideoIntent() {
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
    }
    else {
      //display error state to the user
    }
}

The startActivityForResult() method is protected by a condition that calls resolveActivity() , which returns the first activity component that can handle the Intent . Perform this check to ensure that you are invoking an Intent that won't crash your app.

Additional Resources

For basic camera actions, use an Intent . Otherwise, it is recommended to use the Camera2 and CameraX libraries for anything more complex than basic image or video capture.