Android相机surfaceChanged被不断调用

时间:2012-12-31 08:24:42

标签: android callback camera surfaceview preview

我正在开发一款使用相机的应用。我已经制作了这样的预览课:

public class MyPreview extends SurfaceView implements SurfaceHolder.Callback, Camera.Preview Callback{
    ...

    public void surfaceCreated(SurfaceHolder holder){
    ...
    mCamera.setPreviewCallback(this);
    ...
    }

    public void surfaceDestroyed(SurfaceHolder holder){
    ...
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){
    ...
    }

    public void onPreviewFrame(byte[] data, Camera camera){
    ...
    }
}

基本上,它是CameraDemo示例。 Android CameraDemo Example

问题是,surfaceCreated只被调用一次(它的方式),但是SurfaceChanged被不断调用(而不是只调用一次,或者当表面发生变化时),我相信这就是为什么onPreviewFrame永远不会被调用的原因。相机输入显示在屏幕上,似乎工作正常,但事实并非如此。

有趣的是它在Android 2.x上运行良好,问题只出现在Android 4.1上。 (我没有在其他设备上测试过它)

我一直在环顾四周,我相信这可能是这个stackoverflow unsolved question以及此another stackoverflow unsolved question和此code.google case背后的真正原因。最后一个案例有一个“解决方案”,但它对我不起作用。

那么,有关为什么一直在输入surfaceChanged的想法以及如何解决它?

1 个答案:

答案 0 :(得分:-1)

试试这些教程http://android-er.blogspot.ru/2010/12/implement-takepicture-function-of.html。还可以尝试查看之前的文章。