page.title=Recording Videos Simply parent.title=Capturing Photos parent.link=index.html trainingnavtop=true previous.title=Recording Photos Simply previous.link=photobasics.html next.title=Controlling the Camera next.link=cameradirect.html @jd:body <div id="tb-wrapper"> <div id="tb"> <h2>This lesson teaches you to</h2> <ol> <li><a href="#TaskManifest">Request Camera Permission</a></li> <li><a href="#TaskCaptureIntent">Record a Video with a Camera App</a> <li><a href="#TaskVideoView">View the Video</a></li> </ol> <h2>You should also read</h2> <ul> <li><a href="{@docRoot}guide/topics/media/camera.html">Camera</a></li> <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a></li> </ul> <h2>Try it out</h2> <div class="download-box"> <a href="http://developer.android.com/shareables/training/PhotoIntentActivity.zip" class="button">Download the sample</a> <p class="filename">PhotoIntentActivity.zip</p> </div> </div> </div> <p>This lesson explains how to capture video using existing camera applications.</p> <p>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.</p> <h2 id="TaskManifest">Request Camera Permission</h2> <p>To advertise that your application depends on having a camera, put a {@code <uses-feature>} tag in the manifest file:</p> <pre style="clear:right"> <manifest ... > <uses-feature android:name="android.hardware.camera" android:required="true" /> ... </manifest> </pre> <p>If your application uses, but does not require a camera in order to function, set {@code android:required} to {@code false}. 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 {@link android.content.pm.PackageManager#hasSystemFeature hasSystemFeature(PackageManager.FEATURE_CAMERA)}. If a camera is not available, you should then disable your camera features.</p> <h2 id="TaskCaptureIntent">Record a Video with a Camera App</h2> <p>The Android way of delegating actions to other applications is to invoke an {@link android.content.Intent} that describes what you want done. This process involves three pieces: The {@link android.content.Intent} itself, a call to start the external {@link android.app.Activity}, and some code to handle the video when focus returns to your activity.</p> <p>Here's a function that invokes an intent to capture video.</p> <pre> 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); } } </pre> <p>Notice that the {@link android.app.Activity#startActivityForResult startActivityForResult()} method is protected by a condition that calls {@link android.content.Intent#resolveActivity resolveActivity()}, which returns the first activity component that can handle the intent. Performing this check is important because if you call {@link android.app.Activity#startActivityForResult startActivityForResult()} using an intent that no app can handle, your app will crash. So as long as the result is not null, it's safe to use the intent. </p> <h2 id="TaskVideoView">View the Video</h2> <p>The Android Camera application returns the video in the {@link android.content.Intent} delivered to {@link android.app.Activity#onActivityResult onActivityResult()} as a {@link android.net.Uri} pointing to the video location in storage. The following code retrieves this video and displays it in a {@link android.widget.VideoView}.</p> <pre> @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) { Uri videoUri = intent.getData(); mVideoView.setVideoURI(videoUri); } } </pre>