Android-камера фокусируется только один раз

Мы разрабатываем приложение для 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);

    }

,

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

    }

1 ответ

Это старый вопрос, но все же:

Обратите внимание, что установка сцены через Camera.Parameters.setSceneMode()может фактически переопределить любую предыдущую настройку. Цитирование документации API :

Изменение режима сцены может переопределить другие параметры (например, режим вспышки, режим фокусировки, баланс белого). Например, предположим, что изначально режим вспышки включен, а поддерживаемые режимы вспышки включены/выключены. В режиме ночной съемки как режим вспышки, так и поддерживаемый режим вспышки можно отключить. После установки режима сцены приложения должны вызывать getParameters, чтобы узнать, изменены ли некоторые параметры.

Также документы подразумевают, что могут быть переопределены не только текущие настройки, но и поддерживаемые значения параметров.

Поэтому я предлагаю:

  • Установите режим сцены перед установкой режима фокусировки
  • После установки режима сцены проверьте, поддерживается ли нужный режим фокусировки с помощьюgetSupportedFocusModes()
Другие вопросы по тегам