这一节讲述一下如何利用已经存在的相机应用来录制视频。
你的APP是要完成某个功能,而集成在里面的视频拍摄只是很小的一部分工作。你需要用最小的精力去实现这个功能,而不是重新去创建一个摄像机的应用。值得高兴的是,绝大多数的android设备都提供一个相机的应用,可以直接用来录制视频。这节课程里面,我们就讲述这个。
请求相机权限
要声明你的APP是基于相机的一个应用,用<uses-feature>来声明:
<manifest ... >
<uses-feature android:name="android.hardware.camera" />
...
</manifest ... >
如果你的应用使用了它,但是并不必须需要请求相机来做某项功能,那么增加android:required="false"到上面那个标签里面。这样做的话,Google Play会允许那些没有相机的手机来可以下载你的这个应用。那么你就需要在调用相机之前判断相机是否存在hasSystemFeature(PackageManager.FEATURE_CAMERA)
。如果相机不存在,无法使用,那么你的程序就要关闭这些和相机相关的特性功能。
利用相机APP录制视频
android授权另外一个app执行某个动作是通过intent来设定这个动作,并且和另外一个APP相关联。也是分三个部分:intent自身,启动外部activity,处理录制视频返回的结果。
下面的例子就是利用intent,和拍照应用关联:
private void dispatchTakeVideoIntent() {
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(takeVideoIntent, ACTION_TAKE_VIDEO);
}
最好确保有APP可以处理这个intent.下面的代码就是可以判断这个APP是存在:
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;
}
查看视频
android的拍照应用会返回一个存放视频的intent,这个intent被发送给onActivityResult()函数,作为一个Uri地址,指出了视频存放的位置。下面的视频就是获取录制的视频,并且在 VideoView
显示出来:
private void handleCameraVideo(Intent intent) {
mVideoUri = intent.getData();
mVideoView.setVideoURI(mVideoUri);
}