SetOneShotPreviewCallback()仅在循环内调用一次

时间:2014-08-12 02:39:58

标签: java android android-camera

我有以下代码:

    for (int ii = 0; ii < nOfPictures; ii++){
            mCamera.startPreview();
            mCamera.setOneShotPreviewCallback(this);
    }

但是,setOneShotPreviewCallback()只被调用一次。我在调试模式下运行它并在每次迭代期间在方法调用的断点处停止,但在OnPreviewFrame()中的断点处仅停止一次。

如果有帮助的话,setOneShotPreviewCallback()与循环在同一个线程上也会出现。

2 个答案:

答案 0 :(得分:0)

是。根据{{​​3}},

  

除了在屏幕上显示之外,还安装要为下一个预览帧调用的回调。一次调用后,将清除回调。即使预览是实时的,也可以随时调用此方法。任何其他预览回调都会被覆盖。

答案 1 :(得分:0)

我试图在另一个线程中运行startPreview(),但我相信帧的预览必须在UI线程中完成。也许整个相机都必须在不同的线程上运行。但是由于工作的简单,我将循环放在一个新的线程中并调用setOneShotPreviewCallback(),因为预览帧在循环运行时同时被送到onPreviewFrame()。

我使用的代码:

    Thread preview_thread = new Thread(new Runnable() {
        @Override
        public void run() {             

            for (int ii = 0; ii < numOfPictures; ii++){
            executeOneShotPreviewCallback();
            }
           }
        }, "one_shot_prev_callback_thread");
        preview_thread.start();

我不得不使用辅助函数(executeOneShotPreviewCallback())来执行实际的回调,因为回调对于线程是不可见的。