To perform basic camera actions like capturing a photo or video using the
device's default camera application, you don't 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.