我正在爲Android寫一個應用程序來拍照。代碼在從onPreviewFrame(byte [] data,Camera camera)的預覽中獲取幀後執行一些處理。 問題是android.hardware.Camera的函數takePicture()有時會做我想要的東西,有時不會返回,也不會調用回調函數。當我運行應用程序一些時候,第一張照片不會返回,有時我可以拍攝四張照片,第五張會導致應用程序掛起。有一個simillar線程:problem with taking pictures using the android camera。建議的解決方案是使用上次預覽的框架,但它肯定不是一個好的解決方案!此問題可能會引起,因爲takePicture是Asancronous(Android Doc)。Android Camera.takePicture()不會返回一些?
我只需調用takePicture()函數是這樣的:
public static void takePicture() {
mCamera.takePicture(null, null, jpegCallback);
}
Here是logcat的輸出的鏈接。你可以在輸出中搜索短語「takePicture」,你會看到這個函數有時會返回,有時不會返回。
這是當takePicture返回輸出:
10-02 19:24:36.570: INFO/ShotSingle(3198): ShotSingle::takePicture start
10-02 19:24:36.570: DEBUG/CameraHal(3198): 2489: takePicture() ENTER
10-02 19:24:36.570: DEBUG/MessageQueue(3198): MQ.put(5,0xb6590,0x0,0x8,0x80b0af55)
10-02 19:24:36.570: DEBUG/MessageQueue(3198): MessageQueue::put EXIT
10-02 19:24:36.578: DEBUG/MessageQueue(3198): MQ.get(5,0xb6590,0x0,0x8,0x80b0af55)
10-02 19:24:36.578: DEBUG/CameraHal(3198): 1458: CameraStop() ENTER
10-02 19:24:36.617: DEBUG/CameraHal(3198): 1543: CameraStop() EXIT
10-02 19:24:36.617: DEBUG/MessageQueue(3198): MQ.put(14,0xb6590,0x0,0x8,0x80b0af55)
10-02 19:24:36.617: DEBUG/MessageQueue(3198): MQ.get(14,0xb6590,0x0,0x8,0x80b0af55)
10-02 19:24:36.617: DEBUG/CameraHal(3198): 2497: takePicture() EXIT
10-02 19:24:36.617: INFO/ShotSingle(3198): ShotSingle::takePicture end
,這是因爲當takePicture不返回輸出:
10-02 19:25:20.671: INFO/ShotSingle(3198): ShotSingle::takePicture start
10-02 19:25:20.671: DEBUG/CameraHal(3198): 2489: takePicture() ENTER
10-02 19:25:20.671: DEBUG/MessageQueue(3198): MQ.put(5,0xb8cb8,0x0,0x8,0x80b0af55)
10-02 19:25:20.671: DEBUG/MessageQueue(3198): MessageQueue::put EXIT
10-02 19:25:21.343: INFO/StatusBarPolicy(3393): onSignalStrengthsChanged
10-02 19:25:22.609: WARN/PowerManagerService(3330): Timer 0x7->0x3|0x7
10-02 19:25:23.062: INFO/AudioStreamOutALSA(3198): (virtual android::status_t android::AudioStreamOutALSA::standby()) enter
10-02 19:25:23.125: ERROR/AudioStreamOutALSA(3198): Output standby called!!. Turn off PCM device.
10-02 19:25:23.125: INFO/ALSAStreamOps(3198): [ALSAStreamOps]codecOff mode = 0
10-02 19:25:23.234: INFO/AudioStreamOutALSA(3198): [AudioOutLock]Relase_wake_Lock
有沒有人有這個問題的任何解釋或解決方案?
這是根本原因:https://code.google.com/p/android/issues/detail?id=13966 – poiuytrez