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.