2014-01-28 225 views

回答

1

如果這發生在自定義相機活動中,我懷疑多線程(或實際上,缺少它)。如果你在UI線程上打開攝像頭,那麼pictureTaken()回調也將在同一個線程上調用,凍結UI(令人不快,但也許可以容忍)以及任何BT服務通信,這可能會對後者造成致命的影響。

第一種治療方法是將BT與第二線進行通信,因爲也可能存在其他互鎖條件。

其次,在次要事件線程上打開相機(請參閱example),然後相機回調將不會凍結使用UI線程的UI和服務。

+1

感謝您的回答!它通過創建一個單獨的線程來打開相機:) – shannon

2

當Camera活動進入屏幕時,您的活動可能會被破壞。其中一個原因是內存限制,對此你可以做些什麼。另一個原因可能是您的活動重新開始橫向(請注意,相機活動固定爲橫向)。當你的活動結束後,服務沒有理由保持活力。

修復它的方法是:在您的應用程序內使用「自定義相機」確保您的活動處理方向更改而不重新啓動;即使活動被破壞,也要安排BT服務堅持下去。

+0

感謝您的回答!然而,當新的相機活動被創建時,藍牙連接實際上保持開啓狀態,並且只有當點擊「捕捉」按鈕時,纔會關閉藍牙連接,並調用Camera.PictureCallback。這是爲什麼? – shannon

+0

我很困惑。您是否使用[MediaStore.ACTION_IMAGE_CAPTURE](http://developer.android.com/reference/android/provider/MediaStore.html#ACTION_IMAGE_CAPTURE)意圖,或者您調用[Camera.takePicture()](http:// developer。 android.com/reference/android/hardware/Camera.html#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback ))在你的活動? –

+0

我用Camera.takePicture()。這是一個自定義的相機活動。 – shannon