我正在使用以下网址提供的代码尝试使用Android相机API:
http://marakana.com/forums/android/examples/39.html
This has raised several questions that I have tried in vain to find the answers to so far.1) 我的应用程序需要纵向方向,但我看到的所有代码示例(包括上面提到的URL中的示例)似乎都依赖于横向方向。事实上,迄今为止,无论我尝试了什么,似乎都无法避免横向方向。我已经尝试在
surfaceCreated(...)
中强制参数,如下所示:Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
parameters.set("rotation", "90");
camera.setParameters(parameters);
我尝试在
surfaceChanged(...)
中执行相同的操作。当然,我也按照以下方式在清单中将方向设置为纵向:android:screenOrientation="portrait"
请问有人能提供建议,告诉我哪里做错了以及如何修复吗?
2)我还有一个问题与释放相机资源有关。在上面引用文章的代码中,以下内容在 surfaceDestroyed(...)
方法中被调用:
camera.stopPreview();
camera = null;
目前没有释放相机资源的方法,因此在运行该应用程序后,任何使用相机的后续应用程序都将无法工作。为了解决这个问题,我添加了一个调用来释放资源,如下所示:
camera.stopPreview();
camera.release();
camera = null;
然而,问题在于当我关闭应用程序时,在LogCat中出现以下异常,导致“强制关闭”:
FATAL EXCEPTION: main
java.lang.RuntimeException: Method called after release()
at android.hardware.Camera.setHasPreviewCallback(Native Method)
at android.hardware.Camera.access$600(Camera.java:58)
at android.hardware.Camera.$EventHandler.handleMessage(Camera.java:344)
at android.os.Handler.dispatchMessage(Handler.java.99)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lanf.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
有人能告诉我为什么我不能在那里释放相机资源吗?
提前感谢大家。这相机问题让我抓狂。
附言:我正在HTC Evo上测试所有这些。