Android camera focuses only once

We are developing an application for the Vuzix M100, which should continuously read the barcode and display the result in text form. Therefore, the camera takes a picture every 5 seconds and sends a bitmap to the zxing barcode scanner. We are almost done, but the camera only focuses on the first image. Any suggestions? This is an important part of our code:

@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);

    }

.

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);

    }
+4
source share

Source: https://habr.com/ru/post/1648629/


All Articles