android camera.open失败的问题

enjack_droid 2014-11-25 05:48:09
首先,相机没有被占用,不存在release的问题
也不是2.3版本open需要带参数的问题


**问题1:**
我在button的监听里open,提示“fail to connect to camera service”
btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
Log.i("", "tack picture clicked");
Camera camera = Camera.open();
}
});

如果我新建MySurfaceView继承SurfaceView类,并且实现SurfaceHolder.Callback,然后在surfaceCreated调用Camera.open就不会出错,然后得到一个相机实例一定呀在surfaceCreated里吗?


**问题2:**
如果我在MySurfaceView类里获取SurfaceHolder是通过this.getHolder(),则Camera.open没有问题;如果是在XML里声明一个SurfaceView控件,然后获取控件指针传递到MySurfaceView,再通过这个指针getHolder(),那么open的时候也会出现上述错误,why?
@SuppressWarnings("deprecation")
public void cameraInit(SurfaceView surfaceView){
mSurfaceHolder = surfaceView.getHolder();
//mSurfaceHolder = this.getHolder();
if(null!=mSurfaceHolder){
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
}

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
Log.i(TAG, "changed");
if(null!=mCamera)
{
Camera.Parameters params = mCamera.getParameters();
params.setPictureFormat(PixelFormat.JPEG);
params.setPreviewSize(arg2,arg3);//arg2--width, arg3--height
mCamera.setParameters(params);
mCamera.startPreview();
}
}

@Override
public void surfaceCreated(SurfaceHolder arg0) {
Log.i(TAG, "create");
if(null==mCamera){
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
} catch (IOException e) {
e.printStackTrace();
}
}

}
...全文
3984 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nnbnbn1 2015-12-01
  • 打赏
  • 举报
回复
new Handler().postDelayed(new Runnable() { @Override public void run() { startRecode(); } }, 1000);
媒体盒子 2014-11-26
  • 打赏
  • 举报
回复
相机Open前要设置surface ,这个surface就是底层用来渲染预览画面的,如果surface 都没有create ,底层将无法渲染,我想这就是为什么open不了的原因吧

80,469

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧