Android 工作日记:自定义相机setParameters failed

异常小记 如有大神提出异议 不胜感激

最近在做一个客户定制的自定义相机,按部就班的写完后,在不同机型上出现了适配问题。
上代码:
  if (camera != null) {
            Camera.Parameters p = camera.getParameters();

             List focusModes = p.getSupportedFocusModes();
        if (focusModes
                .contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
            p.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
        }

        long time = new Date().getTime();
        p.setGpsTimestamp(time);
        // 设置照片格式
        p.setPictureFormat(PixelFormat.JPEG);
        Camera.Size previewSize =findPreviewSizeByScreen(p);
        p.setPreviewSize(previewSize.width, previewSize.height);
        p.setPictureSize(previewSize.width, previewSize.height);
         p.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);

                try {
                camera.setParameters(p);
            } catch (Exception e) {
                  Camera.Size previewSize = findBestPreviewSize(p);
                  p.setPreviewSize(previewSize.width, previewSize.height);
                  p.setPictureSize(previewSize.width, previewSize.height);
                  camera.setParameters(p);

            }
        }   
在原生机器上测试无问题,于是兴冲冲拿去到其他机器上测试,光速打脸。。。。
首先,是在华为的一款机器上,我们自己的原件所设置的宽高,在机器上并不适用于其特定的分辨率,这时我们应该获取机器本身所支持的Size,从中找到适合机器的那一个数值。
        int PreviewWidth = 0;
        int PreviewHeight = 0;
        List.Size> sizeList = p.getSupportedPreviewSizes();
        if (sizeList.size() > 1) {
            Iterator.Size> itor = sizeList.iterator();
            while (itor.hasNext()) {
                Camera.Size cur = itor.next();
                if (cur.width >= PreviewWidth
                        && cur.height >= PreviewHeight) {
                    PreviewWidth = cur.width;
                    PreviewHeight = cur.height;
                    break;
                }
            }
        }else if (sizeList.size()==1){
            Camera.Size size = sizeList.get(0);
            PreviewWidth = size.width;
            PreviewHeight = size.height;
        }
        p.setPreviewSize(PreviewWidth, PreviewHeight); //获得摄像区域的大小
        p.setPictureSize(PreviewWidth, PreviewHeight);//设置拍出来的屏幕大小
试验了几个机器没有问题后,遇到了一个vivo,还是报这个错,打了断点后,发现我们这里是可以拿到所支持的宽高的,但是机器本身还是对这个分辨率不适配,所以在try的代码块中拦截到这种情况,不去设置他的PreviewSize和PictureSize,交由机器本身去处理(真是“贴心啊”)。
catch (Exception e) {
                Camera.Parameters parameters = camera.getParameters();// 得到摄像头的参数
                camera.setParameters(parameters);

            }

目前在其他机型上未遇到问题,如果大家有什么想法,希望不吝指教,不胜感激。

你可能感兴趣的:(开发日记)