Я использую код, предоставленный по следующему URL-адресу, чтобы попытаться работать с Android API камеры: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) Еще один вопрос, который у меня связан с выпуском ресурсов камеры. В коде из статьи, указанной выше, следующие называется в методе surfaceDestroyed(...)
:
camera.stopPreview();
camera = null;
Там нет ничего, чтобы освободить ресурсы камеры, так что после запуска этого приложения, любого последующего приложения, которое использует камеру будет не работа. В утра попытке исправить это, я добавил вызов, чтобы освободить ресурсы, например:
camera.stopPreview();
camera.release();
camera = null;
Проблема существует, однако, заключается в том, что, когда я закрыть приложение, я получаю «Force Close» со следующим исключение в 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)
Может ли кто-нибудь сказать мне, почему я не могу освободить ресурсы камеры там?
Благодарим вас заблаговременно. Эта вещь камеры меня заводит.
P.S. Я тестирую все это на HTC Evo.