初识Camera,调用系统拍照录像程序
2016-01-07 16:07
513 查看
Camera 官方指南,英语不太好,翻译有可能不准确,见谅 o(^▽^)o
关于拍照录像,有两种处理方式,一种是构建Intent调用系统或其他的APP,另一种是自定义自己的拍照或录像界面,下面就讲解一下这两种方式
ps:如果你通过Intent调用系统或者其他APP的拍照录像功能,该权限可以不用设置
Camera的功能(官方清单)
ps:详细的使用教程,请参考: Google Play and Feature-Based Filtering
如果你的应用能通过正常的操作使用摄像头和摄像头的这些功能,但是不需要使用它,那么你需要在你的声明里增加android:required属性,并设置为false(有些绕口,其实我也是似懂非懂的 -_-#)
ps:更多关于定位的信息,请参考:Location Strategies
MediaStore.EXTRA_OUTPUT
举个例子演示如何构造一个图像捕获意图并去执行它
当执行startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);方法后,会启动一个Camera界面,当我们结束拍照后,我们要在onActivityResult()方法中进行结果处理(下面有如何处理结果的讲解,Receiving camera intent result)
MediaStore.EXTRA_OUTPUT(同上)
MediaStore.EXTRA_VIDEO_QUALITY
MediaStore.EXTRA_DURATION_LIMIT
MediaStore.EXTRA_SIZE_LIMIT
举个例子演示如何构造一个视频捕获意图并去执行它
当执行startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);方法后,会启动一个Camera界面,当我们结束录像后,我们要在onActivityResult()方法中进行结果处理(下面有如何处理结果的讲解,Receiving camera intent result)
关于拍照录像,有两种处理方式,一种是构建Intent调用系统或其他的APP,另一种是自定义自己的拍照或录像界面,下面就讲解一下这两种方式
Manifest中Camera相关的配置
摄像头权限
<uses-permission android:name="android.permission.CAMERA" />
ps:如果你通过Intent调用系统或者其他APP的拍照录像功能,该权限可以不用设置
其他功能
<uses-feature android:name="android.hardware.camera" />
Camera的功能(官方清单)
android.hardware.camera 程序使用设备摄像头 android.hardware.camera.autofocus 子功能,摄像头自动聚焦功能 android.hardware.camera.flash 子功能,使用闪光灯 android.hardware.camera.front 子功能,使用前置摄像头
ps:详细的使用教程,请参考: Google Play and Feature-Based Filtering
如果你的应用能通过正常的操作使用摄像头和摄像头的这些功能,但是不需要使用它,那么你需要在你的声明里增加android:required属性,并设置为false(有些绕口,其实我也是似懂非懂的 -_-#)
<uses-feature android:name="android.hardware.camera" android:required="false" />
存储权限
如果你需要保存图片或视频到设备的外部存储器(SD Card)中,你需要增加权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
音频录制权限
如果你需要录制音频的话,你需要增加权限<uses-permission android:name="android.permission.RECORD_AUDIO" />
定位权限
如果你的图片需要增加GPS定位信息的话,你需要增加权限<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
ps:更多关于定位的信息,请参考:Location Strategies
调用系统或者其他APP的拍照录像功能
拍照和录像的一个快速的集成办法就是通过Intent调用系统或者其他APP的拍照录像功能。基本步骤
1. Compose a Camera Intent,创建一个Intent去获取图片和视频,使用下面其中一个Intent类型 MediaStore.ACTION_IMAGE_CAPTURE:通过其他Camera APP获取图片 MediaStore.ACTION_VIDEO_CAPTURE:通过其他Camera APP获取视频 2. Start the Camera Intent,使用startActivityForResult()方法执行创建的Camera Intent 3. Receive the Intent Result,重写onActivityResult()方法去接收从这个Camera Intent返回回来的数据
图片捕获Intent
捕获图片的Intent可以包含额外的信息MediaStore.EXTRA_OUTPUT
指定一个地址和名称去构建一个Uri,保存你想保存的图片。这个属性是可选的,但是强烈推荐使用。如果你没有设置该属性,那么应用会使用默认的名称去保存图片到默认的路径,通过intent.getData()方法去获取图片内容
举个例子演示如何构造一个图像捕获意图并去执行它
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100; private Uri fileUri; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // create Intent to take a picture and return control to the calling application Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name // start the image capture Intent startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); }
当执行startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);方法后,会启动一个Camera界面,当我们结束拍照后,我们要在onActivityResult()方法中进行结果处理(下面有如何处理结果的讲解,Receiving camera intent result)
视频捕获Intent
视频捕捉的Intent可以包括以下额外的信息MediaStore.EXTRA_OUTPUT(同上)
MediaStore.EXTRA_VIDEO_QUALITY
取值范围0~1,视频质量和文件大小
MediaStore.EXTRA_DURATION_LIMIT
视频的时长,单位秒
MediaStore.EXTRA_SIZE_LIMIT
视频文件的大小,单位byte
举个例子演示如何构造一个视频捕获意图并去执行它
private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200; private Uri fileUri; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //create new Intent Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); // create a file to save the video intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high // start the Video Capture Intent startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE); }
当执行startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);方法后,会启动一个Camera界面,当我们结束录像后,我们要在onActivityResult()方法中进行结果处理(下面有如何处理结果的讲解,Receiving camera intent result)
接收Intent返回结果并处理
举个例子去讲解如何重写onActivityResult()进行处理从image camera intent或者video camera intent中返回的结果private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100; private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { if (resultCode == RESULT_OK) { // Image captured and saved to fileUri specified in the Intent Toast.makeText(this, "Image saved to:\n" + data.getData(), Toast.LENGTH_LONG).show(); } else if (resultCode == RESULT_CANCELED) { // User cancelled the image capture } else { // Image capture failed, advise user } } if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) { if (resultCode == RESULT_OK) { // Video captured and saved to fileUri specified in the Intent Toast.makeText(this, "Video saved to:\n" + data.getData(), Toast.LENGTH_LONG).show(); } else if (resultCode == RESULT_CANCELED) { // User cancelled the video capture } else { // Video capture failed, advise user } } }
如何自定义自己的拍照或录像程序,请看下一篇:Camera进阶,自定义拍照录像界面
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories