本课讲解如何使用现有的摄像机应用程序捕捉视频。(很大部分和上一篇 Take photos相似)
您的应用程序有工作要做,而集成视频只是其中的一小部分。你希望拍视频时较低成本,也不要重新发明摄像机。令人高兴的是,大多数搭载android操作系统的设备已经有了一个可以记录视频的摄像头应用程序。在这节课中,你让它为你做这个。
请求相机功能
为了宣传你的应用程序依赖于有一个摄像头,在清单文件中放置一个标签:
<manifest ...><uses-feature android:name="android.hardware.camera"android:required="true"/></manifest >
如果您的应用程序使用,但不需要摄像头才能运行,请设置android:required="false"。通过这样做,谷歌Play将允许没有摄像头的设备下载应用程序。然后,您有责任通过调用hasSystemFeature(packagemanagemanager . feature_camera)检查相机在运行时的可用性。如果没有摄像头,你应该禁用你的摄像头功能。
用相机应用程序录制视频
将操作委托给其他应用程序的Android方式是调用一个意图来描述您想要做的事情。这个过程包括三个部分:意图本身,启动外部活动的调用,以及当焦点返回到活动时处理视频的代码。
这是一个调用意图捕获视频的函数。
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);}}
请注意,startActivityForResult()方法受到调用resolveActivity()条件的保护,该条件返回能够处理意图的第一个活动组件。执行这个检查是很重要的,因为如果您使用任何应用程序都无法处理的意图调用startActivityForResult(),您的应用程序将崩溃。所以只要结果不是空的,使用意图是安全的。
查看视频
Android Camera应用程序返回交付给onActivityResult()的视频,作为指向存储中的视频位置的Uri。以下代码检索该视频并将其显示在VideoView中。
@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);
}
}