注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。
原文链接: http://developer.android.com/training/camera/videobasics.html
这节课将展示如何利用现有的相机应用来录制视频。
假设你的应用有一个巨大的任务,而集成视频是它的一部分。你希望尽可能简单地录制视频,并且不要因此而重新构建一个摄像的程序。幸好,Android设备上已经有了一个可以录制视频的相机应用,在这节课中,你将会让它来为你的应用服务。
一). 请求相机权限
要声明你的应用需要依赖摄像头,在清单文件中加入 <uses-feature> 标签:
< manifest ... > < uses-feature android:name ="android.hardware.camera" android:required ="true" /> ... </ manifest >
如果你的应用使用,但并不依赖一个相机来执行功能,那么将“ android:required ”设置为“ false ”。这样的话,那么Google Play将会允许没有相机的设备下载你的应用。那么接下来就是你的责任负责相机是否可用了,在运行时如果调用了需要用相机的函数时,通过调用 hasSystemFeature(PackageManager.FEATURE_CAMERA) 检查是否可以获取相机。如果相机无法获取,那么你就应该禁止你的相关功能特性。
二). 通过一个相机应用录制视频
在Android中向其它应用分发意图是通过激活一个描述你的意图的 Intent 。这一过程分为三步: Intent 自身,调用外部 Activity ,当焦点回到你的activity中处理视频数据的一些代码。
下面的例子是激活一个intent来录制视频:
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()
,返回第一个可以处理该intent的组件。执行这个检查时很重要的因为如果你调用了
startActivityForResult()
并使用一个没有一个应用可以处理的intent,你的应用将会崩溃。所以只要结果不是null,那么使用这个intent是安全的。
三). 查看视频
Android相机应用会在 onActivityResult() 方法中将视频以一个指向视频存储位置的 Uri 的形式,放置在 Intent 中,并将其返回。下面的代码即获取这个视频并且在 VideoView 中显示它:
@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); } }