2011-12-15 15:59:34 -08:00
|
|
|
page.title=Recording Videos Simply
|
2011-12-15 16:47:26 -08:00
|
|
|
parent.title=Capturing Photos
|
2011-12-15 15:59:34 -08:00
|
|
|
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>
|
2013-12-04 17:54:03 -08:00
|
|
|
<li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent
|
2011-12-15 15:59:34 -08:00
|
|
|
Filters</a></li>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<h2>Try it out</h2>
|
|
|
|
|
|
|
|
<div class="download-box">
|
2011-12-15 16:47:26 -08:00
|
|
|
<a href="http://developer.android.com/shareables/training/PhotoIntentActivity.zip"
|
|
|
|
class="button">Download the sample</a>
|
2011-12-15 15:59:34 -08:00
|
|
|
<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>
|
|
|
|
|
2013-12-04 17:54:03 -08:00
|
|
|
<pre style="clear:right">
|
2011-12-15 15:59:34 -08:00
|
|
|
<manifest ... >
|
2013-12-04 17:54:03 -08:00
|
|
|
<uses-feature android:name="android.hardware.camera"
|
|
|
|
android:required="true" />
|
2011-12-15 15:59:34 -08:00
|
|
|
...
|
2013-12-04 17:54:03 -08:00
|
|
|
</manifest>
|
2011-12-15 15:59:34 -08:00
|
|
|
</pre>
|
|
|
|
|
2013-12-04 17:54:03 -08:00
|
|
|
<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
|
2011-12-15 15:59:34 -08:00
|
|
|
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>
|
|
|
|
|
|
|
|
|
2013-12-04 17:54:03 -08:00
|
|
|
<h2 id="TaskCaptureIntent">Record a Video with a Camera App</h2>
|
2011-12-15 15:59:34 -08:00
|
|
|
|
2013-12-04 17:54:03 -08:00
|
|
|
<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>
|
2011-12-15 15:59:34 -08:00
|
|
|
|
|
|
|
<p>Here's a function that invokes an intent to capture video.</p>
|
|
|
|
|
|
|
|
<pre>
|
2013-12-04 17:54:03 -08:00
|
|
|
static final int REQUEST_VIDEO_CAPTURE = 1;
|
|
|
|
|
2011-12-15 15:59:34 -08:00
|
|
|
private void dispatchTakeVideoIntent() {
|
|
|
|
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
|
2013-12-04 17:54:03 -08:00
|
|
|
if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
|
|
|
|
startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
|
|
|
|
}
|
2011-12-15 15:59:34 -08:00
|
|
|
}
|
|
|
|
</pre>
|
|
|
|
|
2013-12-04 17:54:03 -08:00
|
|
|
<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>
|
2011-12-15 15:59:34 -08:00
|
|
|
|
|
|
|
|
|
|
|
<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
|
2012-03-03 00:13:32 +08:00
|
|
|
retrieves this video and displays it in a {@link android.widget.VideoView}.</p>
|
2011-12-15 15:59:34 -08:00
|
|
|
|
|
|
|
<pre>
|
2013-12-04 17:54:03 -08:00
|
|
|
@Override
|
|
|
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
|
|
if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
|
|
|
|
Uri videoUri = intent.getData();
|
|
|
|
mVideoView.setVideoURI(videoUri);
|
|
|
|
}
|
2011-12-15 15:59:34 -08:00
|
|
|
}
|
|
|
|
</pre>
|
|
|
|
|