学习Camera开发时遇到的问题

    总结:

1、用模拟器启动不了camera,提示:java.lang.runtimeException:setparameters failed…..
因为parameters.setPictureSize(320, 480)(设置分辨率)的参数有误

    这个可以看logcat中

ERROR/QualcommCameraHardware(93): picture_size_values=    640×480,320×240,176×144,160×120 找这句 在这个当中选择
如果不清楚分辨率可以却掉这句话,再运行就OK 了。

  2、连续两次以上的拍照,会出现异常:java.lang.RuntimeException:fail to connect to camera service。
因为没有对camera进行释放,或者说系统有自动释放功能但是还没有被处理。可以通过手动释放:
/**
* 停止预览
*/
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera.stopPreview();

                     //手动释放 一定得加!
mCamera.release();

                mCamera=null;

}

 还有记得权限一定要加上

—————————————————————————————————————–

camera 打开之后就出现了 java.lang.RuntimeException: Fail to connect to camera service
由于版本原因引起的,在2.1系统的是不是正常的,然后再试试2.2,2.3的!
根据2.2.和 2.3 构造函数的源码

在建项目时要建2.3以上的,如已经建好但是在window-preferences中改版本也是没用的,这个是我出现的问题

记住:camera.open(0) 是后置摄像头 camera.open(1)  是前置摄像头 这是我试验出来的

 2.3版本
Camera(int cameraId) {
mShutterCallback = null;
mRawImageCallback = null;
mJpegCallback = null;
mPreviewCallback = null;
mPostviewCallback = null;
mZoomListener = null;

Looper looper;
if ((looper = Looper.myLooper()) != null) {
mEventHandler = new EventHandler(this, looper);
} else if ((looper = Looper.getMainLooper()) != null) {
mEventHandler = new EventHandler(this, looper);
} else {
mEventHandler = null;
}

native_setup(new WeakReference<Camera>(this), cameraId);
}

2.2版本

Camera() {
mShutterCallback = null;
mRawImageCallback = null;
mJpegCallback = null;
mPreviewCallback = null;
mPostviewCallback = null;
mZoomCallback = null;

Looper looper;
if ((looper = Looper.myLooper()) != null) {
mEventHandler = new EventHandler(this, looper);
} else if ((looper = Looper.getMainLooper()) != null) {
mEventHandler = new EventHandler(this, looper);
} else {
mEventHandler = null;
}

native_setup(new WeakReference<Camera>(this));
}

2.3 多了一个参数 cameraId

多了一个构造函数 Camera(int cameraId)

希望对大家有所帮助

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏