This lesson teaches you to
You should also read
Try it out
PhotoIntentActivity.zip
This lesson explains how to capture video using existing camera applications.
Your application has a job to do, and integrating videos is only a small part of it. You want to take videos with minimal fuss, and not reinvent the camcorder. Happily, most Android-powered devices already have a camera application that records video. In this lesson, you make it do this for you.
Request Camera Permission
To advertise that your application depends on having a camera, put a
<uses-feature>
tag in the manifest file:
<manifest ... > <uses-feature android:name="android.hardware.camera" /> ... </manifest ... >
If your application uses, but does not require a camera in order to function, add android:required="false"
to the tag. In doing so, Google Play will allow devices without a
camera to download your application. It's then your responsibility to check for the availability
of the camera at runtime by calling hasSystemFeature(PackageManager.FEATURE_CAMERA)
.
If a camera is not available, you should then disable your camera features.
Record a Video with a Camera App
The Android way of delegating actions to other applications is to invoke
an Intent
that describes what you want done. This
involves three pieces: the Intent
itself, a call to start the external
Activity
, and some code to handle the video when focus returns
to your activity.
Here's a function that invokes an intent to capture video.
private void dispatchTakeVideoIntent() { Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); startActivityForResult(takeVideoIntent, ACTION_TAKE_VIDEO); }
It's a good idea to make sure an app exists to handle your intent before invoking it. Here's a function that checks for apps that can handle your intent:
public static boolean isIntentAvailable(Context context, String action) { final PackageManager packageManager = context.getPackageManager(); final Intent intent = new Intent(action); List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; }
View the Video
The Android Camera application returns the video in the Intent
delivered
to onActivityResult()
as a Uri
pointing to the video location in storage. The following code
retrieves this video and displays it in a VideoView
.
private void handleCameraVideo(Intent intent) { mVideoUri = intent.getData(); mVideoView.setVideoURI(mVideoUri); }