释放相机
想机是被设备上的应用们共享的资源.你的应用可以在获取相机实例后使用它,并且你的应用必须在用完后释放它,而且在暂停时(Activity.onPause())也要釋放它.如果你的应用没有适当的释放相机,所有后续试图获取相机使用权的操作,包括你自己的应用,都会失败并且导致那些应用关闭.
要释放一个相机对象实例,使用方法Camera.release(),如下代码所示:
public class CameraActivity extends Activity {
private Camera mCamera;
private SurfaceView mPreview;
private MediaRecorder mMediaRecorder;
...
@Override
protected void onPause() {
super.onPause();
releaseMediaRecorder(); // if you are using MediaRecorder, release it first
releaseCamera(); // release the camera immediately on pause event
}
private void releaseMediaRecorder(){
if (mMediaRecorder != null) {
mMediaRecorder.reset(); // clear recorder configuration
mMediaRecorder.release(); // release the recorder object
mMediaRecorder = null;
mCamera.lock(); // lock camera for later use
}
}
private void releaseCamera(){
if (mCamera != null){
mCamera.release(); // release the camera for other applications
mCamera = null;
}
}
}
保存媒体文件
用户创建的媒体文件,比如图片或视频,应该被保存到设备的外部存储中(SDCard),这样可以保留系统空间并且使得用户可以不通过设备也能获取这些文件.一个设备上有很多可以存放媒体文件的路径位置,然而只有两个标准的路径对于开发者来说是必须考虑的:
·Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)-此方法返回标准的,共享的,并且是推荐的存储位置.此路径是被共享的(公开的),所以其它应用可以轻松发现然后读取,修改以及删除此路径下的文件们.如果你的应用被用户卸载,保存在此路径下的文件将被删除.要避免与干涉已存在的图片或视频文件,你应该在路径下为你的应用创建一个子文件夹,如后面例子中所示.此方法从Android2.2(APILevel8)中开始可以使用,对于等价的早期API的调用,见"保存共享文件"一节.
·Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)-此方法返回一个标准的存储图像和视频位置,并且此位置与你的应用会关联起来.如果你的应用被删除,所有此位置下的文件们都将被删除.此位置下的文件不会强制应用安全特性,所以其它应用可以读取,修改以及删除它们.
下面的代码示例演示了如何为一个媒体文件创建一个文件或Uri位置.这个文件可以在通过intent调用一个设备的相机或在创建一个相机应用时使用:
public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;
/** 创建一个文件Uri来存储一个图像或视频 */
private static Uri getOutputMediaFileUri(int type){
return Uri.fromFile(getOutputMediaFile(type));
}
/** 创建一个文件用于存储图像或视频 */
private static File getOutputMediaFile(int type){
// 为了安全,你应该检查SDCard是否被mounted,
// 所以应先调用Environment.getExternalStorageState().
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyCameraApp");
//如果你想创建图像并在应用之间共享,还想让你的图像在你的应用卸载后依然存在,
// 这个位置是最好的选择.
// 如果存储位置不存在,创建它.
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// 创建媒体文件的名字
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
} else if(type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_"+ timeStamp + ".mp4");
} else {
return null;
}
return mediaFile;
}
注:Environment.getExternalStoragePublicDirectory()只能用于Android2.2(APILevel8)或更高版本中.如果你的目标设备使用早期版本,应用用Environment.getExternalStorageDirectory()代替.
相机特性Features
Android支持大量的相机特性,你可以在你的应用中调节它们.比如图像格式,闪光模式,焦点设置,以及更多.本节列出常用的相机特性,并且简要说明如何使用它们.大多数相机特性可以使用Camera.Parameters对象取得或设置.然而,有一些重要的特性需要比Camera.Parameters更复杂的方式进行设置,这些特性在以下各节中说明:
·测光与聚焦区域
·面部检测
·定时拍摄视频
对于如何使用那些通过Camera.Parameters控制的一般特性,请见后面的"使用相机特性"一节.
表1.各版API中引入的常用相机特性表
注:这些特性并不是在所有的设备上都被支持,因为硬件的差别和软件的实现各有不同.
分享到:
相关推荐
android多媒体和相机详解十.doc
android多媒体和相机详解十.pdf
android多媒体和相机详解十.doc
《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》Android凭借其强大的功能逐渐赢得了广大用户和开发者的青睐,已经成为移动开发平台上的翘楚。全书分为17章,分别详细讲解了Android系统基础,深入底层...
第7章 娱乐和多媒体应用 7.1 获取图片的宽和高 7.1.1 实现原理 7.1.2 位图操作的基本知识 7.1.3 具体实现 7.2 绘制几何图形 7.3 手机屏保 7.4 照片拖动效果 7.5 存储卡中的图片 7.6 获取内置媒体文件 7.7 调节音量 ...
何为hal层深入分析,goldfish、msm、map内核和驱动解析,显示系统、输入系统、振动器系统、音频系统、视频输出系统的驱动,openmax多媒体、多媒体插件框架,传感器、照相机、wi-fi、蓝牙、gps和电话系统等。...
《Android应用开发详解》 作者:郭宏志 编著 内容简介 本书分为三个部分,包括基础篇、技术篇和应用篇。由浅入深地讲述了Android应用开发的方方面面。 第一篇 基础篇 第1章 Android概述 Android概述,讲述了...
李骏、陈小玉编著的《Android驱动开发与移植实战详解》分为18章,依次讲解了Android系统的基本知识, Linux内核的基本知识,分析了Android系统的源码,深入分析HAL层的基本知识,GoldFish下的驱动、MSM内核和驱动、...
全书分为21章,依次讲解驱动移植的必要性, Goldfish、OMAP内核和驱动解析,显示系统、输入系统、振动器系统、音频系统、视频输出系统的驱动,OpenMax多媒体和多媒体插件框架,传感器,照相机,Wi-Fi,蓝牙和GPS,...
第4~9章是必备技术篇,详细讲解了Android底层开发的必备技术,分别讲解了分析Android源码、驱动移植、HAL层分析、Goldfish内核驱动分析、MSM内核驱动分析和OMAP内核驱动分析的基本知识;第10~21章是核心技术与应用...
全书分为21章,依次讲解驱动移植的必要性, Goldfish、OMAP内核和驱动解析,显示系统、输入系统、振动器系统、音频系统、视频输出系统的驱动,OpenMax多媒体和多媒体插件框架,传感器,照相机,Wi-Fi,蓝牙和GPS,...
《Android底层开发技术实战详解:内核、移植和驱动(第2版)》从底层原理开始讲起,结合真实的案例向读者详细介绍了Android内核、移植和驱动开发的整个流程。全书分为21章,依次讲解驱动移植的必要性, Goldfish、...
14.1 Android多媒体插件373 14.2 需要移植的内容374 14.3 opencore引擎375 14.3.1 opencore层次结构375 14.3.2 opencore代码结构376 14.3.3 opencore编译结构377 14.3.4 opencore oscl381 14.3.5 实现...
《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...
14.1 Android多媒体插件373 14.2 需要移植的内容374 14.3 opencore引擎375 14.3.1 opencore层次结构375 14.3.2 opencore代码结构376 14.3.3 opencore编译结构377 14.3.4 opencore oscl381 14.3.5 实现...