在使用相机的时候经常会遇到这种问题,尤其是自定义相机的,之前在三星上解决了好久,解决方案没有记录忘记怎么解决来着,此次专门做个记录,最进在最新的锤子手机上又复现了,总结出来的就是不支持设置的尺寸大小,报错的位置
camera.setParameters(p);
这是因为个别机型在SupportPreviewSizes里汇报了支持某种预览尺寸,但实际是不支持的
//寻找最佳预览尺寸 Camera.Size previewSize = findBestPreviewSize(p); //设置预览大小 p.setPreviewSize(previewSize.width, previewSize.height); //设置图片大小 p.setPictureSize(previewSize.width, previewSize.height); try { camera.setParameters(p); }catch (Exception e1) { e1.printStackTrace(); }
以上是我的部分源码,在锤子手机上报错了,后来在其他源码看到人家是把p.setPreviewSize跟p.setPictureSize分开来
try catch的,这时候就知道是设置哪个参数报错了,以下是参照解决的源码
try { mCamera.setParameters(params); } catch (Exception e) { //非常罕见的情况 //个别机型在SupportPreviewSizes里汇报了支持某种预览尺寸,但实际是不支持的,设置进去就会抛出RuntimeException. e.printStackTrace(); try { //遇到上面所说的情况,只能设置一个最小的预览尺寸 params.setPreviewSize(1920, 1080); mCamera.setParameters(params); } catch (Exception e1) { //到这里还有问题,就是拍照尺寸的锅了,同样只能设置一个最小的拍照尺寸 e1.printStackTrace(); try { params.setPictureSize(1920, 1080); mCamera.setParameters(params); } catch (Exception ignored) { } } }我的报错是在p.setPreviewSize被捕获了,我把这两个分开try catch了还是报错,原因是p.setPictureSize(previewSize.width, previewSize.height);这个尺寸不支持,把p.setPictureSize改成固定的尺寸就可以了