【发布时间】:2012-04-07 10:42:27
【问题描述】:
所以我已经阅读了相机 API,但在这方面找不到任何东西。我正在使用相机来抓取帧并且它工作得很好,直到我尝试释放相机。我在一系列调用中复制了错误:
camera = Camera.open();
camera.setPreviewDisplay(getHolder());
Parameters params = camera.getParameters();
List<Size> ls = params.getSupportedPreviewSizes();
Size size = ls.get(1);
this.width = size.width;
this.height = size.height;
params.setPreviewSize(size.width, size.height);
camera.setParameters(params);
camera.setDisplayOrientation(90);
camera.setPreviewCallback(this);
camera.startPreview();
camera.stopPreview();
camera.release();
我得到的错误是
03-22 13:31:42.592: E/AndroidRuntime(14152): java.lang.RuntimeException: Method called after release()
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.hardware.Camera.setHasPreviewCallback(Native Method)
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.hardware.Camera.access$600(Camera.java:114)
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:545)
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.os.Handler.dispatchMessage(Handler.java:99)
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.os.Looper.loop(Looper.java:130)
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.app.ActivityThread.main(ActivityThread.java:3684)
03-22 13:31:42.592: E/AndroidRuntime(14152): at java.lang.reflect.Method.invokeNative(Native Method)
03-22 13:31:42.592: E/AndroidRuntime(14152): at java.lang.reflect.Method.invoke(Method.java:507)
03-22 13:31:42.592: E/AndroidRuntime(14152): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:845)
03-22 13:31:42.592: E/AndroidRuntime(14152): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:603)
03-22 13:31:42.592: E/AndroidRuntime(14152): at dalvik.system.NativeStart.main(Native Method)
所以无论发生什么都不在我的职能之一中。 如果我注释掉 camera.setPreviewCallback(this);那么这个错误不会出现,但我显然失去了我的回调,这是在我的应用程序中包含相机的全部意义。
【问题讨论】:
-
我也遇到了同样的问题,我用http://stackoverflow.com/a/34064944/4531507修复了它
-
一般规则是任何相机调用都可以在任何时候抛出 RuntimeException,即使具体调用没有正式记录此异常。如果您的测试设备永远不会出现这种异常行为,请放心,硬件、ROM 和已安装软件的某些不幸叠加会以可重现或不可重现的方式导致此崩溃。