Android相机只聚焦一次

LBr*_*Bre 5 camera android focus zxing vuzix

我们正在为Vuzix M100开发一个应用程序,它应该连续读取条形码并在textView中显示结果.因此,相机每5秒拍摄一张照片并将位图发送到zxing条形码扫描仪.我们差不多完成了,但相机只关注第一张照片.有什么建议?这是我们代码的重要部分:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView) findViewById(R.id.textView1);

        mPreview = (SurfaceView) findViewById(R.id.sv1);
        mPreview.getHolder().addCallback(this);

        mCamera = Camera.open();
        final Parameters param = mCamera.getParameters();

        param.setJpegQuality(100);
        param.setPictureSize(1600, 1200);
        param.setFocusMode(param.FOCUS_MODE_CONTINUOUS_PICTURE);
        param.setSceneMode(Parameters.SCENE_MODE_BARCODE);

        mCamera.setParameters(param);

        final Handler h = new Handler();
        final int delay = 5000; 

        h.postDelayed(new Runnable(){
            int count = 1;
            public void run(){
                tryAutoFocus();
                param.setFocusMode(param.FOCUS_MODE_FIXED);
                param.setFocusMode(param.FOCUS_MODE_AUTO);

                h.postDelayed(this, delay);
            }
        }, delay);

    }
Run Code Online (Sandbox Code Playgroud)

.

private void tryAutoFocus() {

        final PictureCallback myPictureCallback = new PictureCallback() {

            @Override
            public void onPictureTaken(byte[] data, Camera camera) {

                try {
                    Options options = new BitmapFactory.Options();
                    options.inScaled = false;
                    Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length, options);
                    createExternalStoragePublicPicture(bmp);

                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        };

        AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback() {

            @Override
            public void onAutoFocus(boolean success, Camera arg1) {
                // TODO: Problem: Fokussiert nur beim ersten Foto           

                mCamera.takePicture(null, null, null, myPictureCallback);

                mCamera.cancelAutoFocus();
                mCamera.startPreview();
            }
        };

        mCamera.autoFocus(myAutoFocusCallback);

    }
Run Code Online (Sandbox Code Playgroud)

Gro*_*uez 0

这是一个老问题,但仍然是:

请注意,通过设置场景Camera.Parameters.setSceneMode()实际上可能会覆盖任何先前的设置。引用API文档

更改场景模式可能会覆盖其他参数(例如闪光模式、对焦模式、白平衡)。例如,假设最初的闪光灯模式处于打开状态,并且支持的闪光灯模式处于打开/关闭状态。在夜景模式下,闪光模式和支持的闪光模式都可能更改为关闭。设置场景模式后,应用程序应调用 getParameters 来了解某些参数是否发生更改。

此外,文档还暗示不仅可以覆盖当前设置,还可以覆盖支持的参数值。

所以我建议:

  • Set the scene mode before setting the focus mode
  • After setting the scene mode, check if the desired focus mode is still supported with getSupportedFocusModes()