android camera开发的一些问题记录(下)

问题1, 摄像头设置自动对焦后,不能自动对焦的情况 或者出现
java.lang.RuntimeException: autoFocus failed
at android.hardware.Camera.native_autoFocus的问题

代码:
    private final Camera.AutoFocusCallback mAutoFocusCallback = new Camera.AutoFocusCallback() {
        @Override
        public void onAutoFocus(boolean success, Camera camera) {
            if (success && isPreviewing()) {
                mCamera.setOneShotPreviewCallback(mPreviewCallback);
            } else {
                mCameraAutoFocusHandler.sendEmptyMessageDelayed(MSG_DO_AUTO_FOCUS, TIME_BETWEEN_CAPTURE);
            }
        }
    };

    private final Handler mCameraAutoFocusHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MSG_DO_AUTO_FOCUS:
                    if (mCamera != null) {
                        mCamera.autoFocus(mAutoFocusCallback);
                    }
                    break;
            }
        }
    };

不能预览的原因:如果mCamera.setPreviewDisplay(holder); 设置的地方不对,在创建surfaceView时他的完成时间可能会晚于AutoFocus的时间, 会出现不能自动对焦的问题
解决方法:可以在第一次  mCameraAutoFocusHandler.sendEmptyMessageDelayed(MSG_DO_AUTO_FOCUS, TIME_BETWEEN_CAPTURE )设置一个delay时间,就可以完美解决



另外:为了避免一系列问题的出现,一般在

@Override
    public void surfaceCreated(SurfaceHolder holder) {} 中setPreviewDisplay(holder)操作,   除非绕不开,否则尽量不要保存holder

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值