Обратного вызова автофокуса камеры не происходит
Я использую Camera API на Android и получил свой код для работы на нескольких платформах, включая Samsung Galaxies и HTC Desire. До сих пор я испытываю только проблему на HTC Desire Z, которая периодически.
в моем коде я звоню следующие инструкции
camera.startPreview();
camera.autoFocus(autoFocusCallback);
где я уже создал класс autoFocusCallback требуется. Я хотел бы еще раз подчеркнуть, что этот код работает на телефонах, включая тот, с которым у меня проблемы, так что не занимайтесь тщательным анализом кода.:) После вызова обратного вызова мой код продолжает делать снимок, но эта часть на данный момент не имеет значения.
Непостоянная проблема заключается в том, что для определенного случайного изображения (происходит один из 20-100 раз) обратного вызова не происходит. Своими собственными Log.i() я подтвердил, что это последняя выполненная команда (т. Е. Код не возвращается к обратному вызову). Отладка также показывает, что об ошибках не сообщается.
Просто чтобы успокоиться, мой обратный вызов выглядит примерно так
AutoFocusCallback autoFocusCallback = new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
Log.i("tag","this ran");
...
...
}
};
Результаты Logcat для успешного запуска выглядят примерно так
07-12 10:17:50.564: DEBUG/QualcommCameraHardware(1223): startPreview X
07-12 10:17:50.564: DEBUG/QualcommCameraHardware(1223): autoFocus E
07-12 10:17:50.564: DEBUG/QualcommCameraHardware(1223): autoFocus X
07-12 10:17:50.564: DEBUG/QualcommCameraHardware(1223): runAutoFocus E
07-12 10:17:50.564: DEBUG/QualcommCameraHardware(1223): af start (fd 49)
07-12 10:17:51.184: DEBUG/QualcommCameraHardware(1223): native_set_afmode: ctrlCmd.status == 0
07-12 10:17:51.184: DEBUG/QualcommCameraHardware(1223): af done: 1
07-12 10:17:51.184: DEBUG/QualcommCameraHardware(1223): runAutoFocus X
07-12 10:17:51.184: DEBUG/QualcommCameraHardware(1223): takePicture(479)
Но проблемный пробег такой
07-12 10:17:52.194: DEBUG/QualcommCameraHardware(1223): startPreview X
07-12 10:17:52.194: DEBUG/QualcommCameraHardware(1223): autoFocus E
07-12 10:17:52.194: DEBUG/QualcommCameraHardware(1223): autoFocus X
07-12 10:17:52.194: DEBUG/QualcommCameraHardware(1223): runAutoFocus E
07-12 10:17:52.194: DEBUG/QualcommCameraHardware(1223): af start (fd 49)
а потом зависает.
Я хотел бы знать, есть ли у кого-нибудь какие-либо идеи по поводу этой проблемы, или вы испытали нечто подобное? Мне удалось найти только один поток в сети с похожими проблемами, вот он http://groups.google.com/group/android-developers/browse_thread/thread/75ecb8db0ae02bdb
2 ответа
У вызовов автофокуса нет времени ожидания. Я сталкивался с некоторыми устройствами, где вызовы автофокуса время от времени не могут перезвонить (даже в идеальных условиях). Где тот же код работает нормально на других устройствах.
Мое решение состояло в том, чтобы свернуть мой собственный механизм тайм-аута для автофокуса. Я сделал это с запланированным будущим, но наилучшая реализация тайм-аута может зависеть от вашего конкретного случая использования.
final ScheduledFuture<?> focusTimeoutFuture = mScheduledExecutorService.schedule(new Runnable() {
@Override
public void run()
{
takePictureAndCancelAutoFocus();
}
}, 3, TimeUnit.SECONDS);// add a 3 second timeout to autofocus
mCamera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean b, Camera camera)
{
// cancel the timeout future if it didn't run already
boolean canceledFuture = focusTimeoutFuture.cancel(false);
if(canceledFuture)
{
takePictureAndCancelAutoFocus();
}
}
}
Не решение вашей конкретной проблемы, но в целом вопрос заключается в том, что вы можете вызвать автофокусировку перед началом просмотра. В этом случае также не происходит автофокус при включении предварительного просмотра.
Из документации
"Этот метод действителен только при активном предварительном просмотре (между startPreview()
и раньше stopPreview()
) ".