//Callback interface used to notify on completion of camera auto focus 相机完成自动对焦后调用的回调接口
private final class AutoFocusCallback implements android.hardware.Camera.AutoFocusCallback { @Override public void onAutoFocus( boolean focused, android.hardware.Camera camera) { if (mPaused) return; mAutoFocusTime = System.currentTimeMillis() - mFocusStartTime; Log.v(TAG, "mAutoFocusTime = " + mAutoFocusTime + "ms"); setCameraState(IDLE); mFocusManager.onAutoFocus(focused); }
对于camera的翻译:
camera类用来设置图像的配置,启动或者停止预览,抓图,和为图像编码找回帧图。这个camera类是作为camera服务的客户端,是用来控制真实的摄像硬件。
要访问摄像设备,你必须在manifest里面申明camera权限,必须保证包括<uses-feature>元素,比如你要使用摄像和自动对焦功能,你的manifest必须包括如下内容:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
要通过此类来实现照相功能,你可以使用如下几步:
1、通过open(int)来获得一个Camera实例。
public void open()
063 {
064 synchronized (this) {
065 boolean old = mCondition;
066 mCondition = true;
067 if (!old) {
068 this.notifyAll();
069 }
070 }
071 }
2、通过getParameters()方法获得现有的设置。
调用CameraHolder.instance().open()得到一个android.hardwareCamera实例mCameraDevice
ensureCameraDevice()-->CameraHolder.instance().open()-->mCameraDevice.getParameters();确保摄像头存在,并将摄像头打开。
3、如有必要,修改能过Camera.Parameters 返回的parameter对象,然后调用setParameters(Camera.Parameters).
一.camera启动
1.一个activity启动调用流程:
onCreate()-->onStart()-->onResume()
onCreate():
1.可添加所需布局文件,画界面。
2.开启线程,启动硬件摄像头,调用CameraHolder.instance().open()得到一个android.hardwareCamera实例mCameraDevice。
3、如有必要,修改能过Camera.Parameters 返回的parameter对象,然后调用setParameters(Camera.Parameters).
4、如有需要,调用setDisplayOrientation(int). (备注:此方法在2.1版本里没有,在2.2+中有,但发现在2.2中调用会报错,最后使用了parameters.setRotation(int);)
5、重要:setPreviewDisplay(SurfaceHolder)前对SurfaceHolder进行完全的初始化,没有surface,camera将不能启动预览。
6、重要:调用startPreview方法来启动更新预览界面。预览必须在你可以照相前启动。
7、如果你需要,调用takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)来抓取一张相片,等待
callbacks为你提供真实的图像数据。
8、照完相后,预览视图将停止,需要再照时,首先要再次调用startPreview()方法。
9、调用stopPreview()方法来停止更新预览界面。
10、重要:调用release()方法来释放被其它应用使用的摄像头。应用必须在onPause()方法里尽快的释放camera并且在onResume()方法对其重新open();