Пишу приложение для андроида для фотографирования.Код выполняет некоторую обработку после получения кадра из предварительного просмотра в onPreviewFrame (данные byte [], Camera camera).Проблема заключается в функции takePicture () android.hardware.Camera, которая иногда делает именно то, что я хочу, а иногда не возвращает, и никакие обратные вызовы не будут вызваны.Когда я запускаю приложение несколько раз, первый снимок не возвращается, а иногда я могу сделать четыре снимка, а пятый вызывает зависание приложения.Существует аналогичная тема: проблема с фотографированием с помощью камеры Android .Предлагаемое решение состоит в том, чтобы использовать кадр из последнего предварительного просмотра, но, конечно, это не очень хорошее решение!Эта проблема может возникнуть, потому что takePicture является Asancronous ( Android Doc ).
Я просто вызываю функцию takePicture () следующим образом:
public static void takePicture() {
mCamera.takePicture(null, null, jpegCallback);
}
Здесь - это ссылка на вывод 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
У кого-нибудь есть объяснения?или решение этой проблемы?