nicecock
//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();

分类:

技术点:

相关文章: