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

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

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

             List<String> 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<Camera.Size> sizeList = p.getSupportedPreviewSizes();
        if (sizeList.size() > 1) {
            Iterator<Camera.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);

            }

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值