2015-06-01 107 views
1

我開始使用新的camera2 API。開始第二個活動後相機不工作

我在我的第一個Activity中運行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輸出撕下。所以當你的第一個Activity進入後臺時,TextureView不再是相機數據的有效目標。

您打算如何將預覽數據發送到第二個Activity的TextureView?切換髮生時,您需要切換預覽緩衝區的流以定位第二個TextureView。當您切換到第二個活動時,您可以通過創建一個新的相機捕獲會話來執行此操作,該會話以第二個TextureView爲目標。

+0

我這樣做,我開始新的一切,像第一個活動一樣對待新的活動,並像第一個活動一樣使用相同的算法啓動相機。我的錯誤是,我沒有在第一個活動中結束相機捕捉會話嗎? – Jonas

+0

是的,您通常需要關閉相機實例,如果它所在的活動不再可見。這有時可以避免,但需要特殊處理 - 如果您的代碼在兩項活動中都相同,則在第一項活動中關閉相機是最安全的選擇。 –

相關問題