请求相机权限(Request Camera Permission)
为了让别人知道你的应用依赖照相机,在你的manifest文件中添加<uses-feature>
标签:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dystu.videodemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<uses-feature android:name="android.hardware.camera"
android:required="true"
/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
如果你的程序并不需要一定有Camera,可以添加android:required="false"
的tag属性。这样的话,Google Play 会允许没有camera的设备下载这个程序。当然你有必要在使用Camera之前通过hasSystemFeature(PackageManager.FEATURE_CAMERA)方法来检查设备上是否有Camera。如果没有,你应该关闭你的Camera相关的功能!
使用相机程序来录制视频(Record a Video with a Camera App)
Android中将动作委托给其他应用的方法是:启动一个Intent来完成你想要的动作。这个步骤包含三部分: Intent 本身,启动的外部 Activity, 与一些处理返回视频的代码。
这里是一个能广播录制视频intent的函数
public void click(View view) {
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
}
}
注意在调用startActivityForResult(android.content.Intent, int)">startActivityForResult()方法之前,先调用resolveActivity(),这个方法会返回能处理对应intent的活动组件(activity component)中的第一个activity(译注:就是检查有没有能处理这个intent的Activity)。执行这个检查非常必要,因为如果你调用startActivityForResult()时,没有app能处理你的intent,你的app就会crash。所以只要返回值不为null,触发intent就是安全的。
查看视频(View the Video)
Android的Camera程序会把指向视频存储地址Uri添加到Intent中,并传送给onActivityResult(int, int, android.content.Intent)。下面的代码演示了取出这个视频并显示到VideoView。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
Uri videoUri = data.getData();
vv.setVideoURI(videoUri);
vv.setMediaController(new MediaController(this));
vv.start();
}
}
运行,效果图: