Android相机surfaceChanged被不断调用

Bob*_*ick 5 camera android callback preview surfaceview

我正在开发一个使用相机的应用程序.我做了这样的预览类:

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){
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,它是CameraDemo的例子.Android CameraDemo示例

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

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

我一直在环顾四周,我相信这可能是这个stackoverflow未解决的问题另一个stackoverflow未解决的问题和这个code.google案例背后的真正原因.最后一个案例有一个"解决方案",但它对我不起作用.

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

小智 -1

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

  • 请注意,不鼓励使用 [仅链接答案](http://meta.stackoverflow.com/tags/link-only-answers/info),因此答案应该是搜索解决方案的终点(而不是参考文献的另一个停留点,随着时间的推移,这些参考文献往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。 (2认同)