次の URL で提供されているコードを使用して、Android Camera API を操作しようとしています。
http://marakana.com/forums/android/examples/39.html
これにより、これまで答えを見つけるために無駄に試みたいくつかの質問が発生しました.
1) 私のアプリケーションは縦向きにする必要がありますが、私が見たすべてのコード例 (上記の URL に含まれています) はすべて横向きに依存しているようです。実際、これまで何を試しても、ランドスケープは避けられないようです。私は次のようにパラメータを強制しようとしましsurfaceCreated(...)
た:
Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
parameters.set("rotation", "90");
camera.setParameters(parameters);
で同じことをやってみましたsurfaceChanged(...)
。もちろん、次のように、マニフェストで向きを縦向きに設定しています。
android:screenOrientation="portrait"
私が間違っていることとそれを修正する方法について誰か提案がありますか?
2) もう 1 つの質問は、カメラ リソースの解放に関するものです。上記の記事のコードでは、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)
そこでカメラリソースを解放できない理由を誰か教えてもらえますか?
よろしくお願いします。このカメラのことは私を夢中にさせています。
PS 私は HTC Evo でこれらすべてをテストしています。