2015-06-01 3 views
1

Я начал работать с новым API-интерфейсом camera2.Камера не работает после запуска второй активности

Я запускаю предварительный просмотр камеры на TextureView в моем первом действии. Через мой навигационный ящик можно запустить вторую операцию. Я хочу, чтобы это показало мне предварительный просмотр камеры в TextureView. К сожалению, экран остается белым, и я не вижу изображения. Я не знаю, ошибки и не могу найти что-то по этому поводу:

5278-5414/de.application E/CameraDeviceGLThread-0﹕ Received exception on GL render thread: 
    java.lang.IllegalStateException: swapBuffers: EGL error: 0x300d 
      at android.hardware.camera2.legacy.SurfaceTextureRenderer.checkEglError(SurfaceTextureRenderer.java:487) 
      at android.hardware.camera2.legacy.SurfaceTextureRenderer.swapBuffers(SurfaceTextureRenderer.java:480) 
      at android.hardware.camera2.legacy.SurfaceTextureRenderer.drawIntoSurfaces(SurfaceTextureRenderer.java:681) 
      at android.hardware.camera2.legacy.GLThreadManager$1.handleMessage(GLThreadManager.java:103) 
      at android.os.Handler.dispatchMessage(Handler.java:98) 
      at android.os.Looper.loop(Looper.java:211) 
      at android.os.HandlerThread.run(HandlerThread.java:61) 06-01 23:00:44.258 5278-5414/de.application I/CameraDeviceState﹕ Legacy camera service transitioning to state ERROR 

Я начинаю новая активность довольно просто, и функция для камеры в обоих Activitys более или менее то же самое.

Intent i = new Intent(MainActivityOld.this, FullScreenActivity.class); 
startActivity(i); 

Можете ли вы представить себе ошибку, которую я делаю? Мне нужно как-то остановить первый просмотр камеры?

ответ

1

Как правило, TextureView сбрасывает выходной сигнал SurfaceTexture, когда он больше не отображается. Поэтому, когда ваше первое действие переходит в фоновый режим, TextureView больше не является допустимой целью для данных камеры.

Как вы планируете отправлять данные предварительного просмотра в TextureView вашей второй активности? Вам нужно будет переключить поток буферов предварительного просмотра, чтобы нацелиться на второй TextureView, когда происходит переключение. Вы можете сделать это, создав новый сеанс захвата камеры, который нацелен на второй TextureView, когда вы переключаетесь на второе действие.

+0

Я делаю это, я начинаю все новое и рассматриваю новую деятельность так же, как и первое действие, и использую тот же алгоритм для запуска камеры, что и в первом действии. Является ли моя ошибка, что я не заканчиваю сеанс захвата камеры в первом действии? – Jonas

+0

Да, вам обычно нужно отключить экземпляр камеры, если активность, в которой он находится, больше не отображается. Этого иногда можно избежать, но требует специальной обработки - если ваш код идентичен в обоих действиях, то закрытие камеры в первом действии является самым безопасным вариантом. –

Смежные вопросы