Дроид x камера Автофокусный обратный вызов всегда возвращает false

StackOverflow https://stackoverflow.com/questions/8317311

  •  25-10-2019
  •  | 
  •  

Вопрос

Я использую Motorola Droid X, и по какой -то причине переменная успеха для успеха в Onautofocus (логический успех, камера камера) всегда возвращает False. Похоже, он работает с другими устройствами, включая Droid 2, так что это, кажется, конкретная задача.

Мой код в основном это:

camera.autoFocus(new AutoFocusCallback() {
    @Override
    public void onAutoFocus(boolean success, Camera camera) {
        takePicture();
    }
});
Это было полезно?

Решение

После нескольких часов отладки проблема заключалась в том, чтобы установить размер предварительного просмотра вида поверхности большого размера. Я не понимаю, почему это повлияет на автофокусировку, но установление размера предварительного просмотра на меньший размер исправил проблему. Это может быть вызвано тем, что размер предварительного просмотра больше разрешения экрана, потому что это было единственное разрешение, которое не сработало. Надеюсь, это поможет любому другому, кто может столкнуться с этой проблемой.

Обновление: я снова столкнулся с этой проблемой после изменения макета моей страницы предварительного просмотра, и кажется, что фокус просто не удается для определенных размеров предварительного просмотра. До сих пор эти размеры не удались для меня: 720x480, 1280x720

Другие советы

Я согласен с ответом DT0. Я использую класс предварительного просмотра из образца Android, и для его исправления я просто увеличил толерантность к аспекту при определении оптимального размера предварительного просмотра:

private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
    final double ASPECT_TOLERANCE = 0.2; // this was 0.1
    double targetRatio = (double) w / h;
    ...
}

С этим изменением, вместо того, чтобы устанавливать оптимальный размер до 720x480 (что приводит к сбою автоматического фокуса), он устанавливает оптимальный размер до 640x480, который проходит. Я до сих пор не понимаю, почему это решает проблему (фактическое представление - размер 734x480), но я рад, что это так.

Мне пришлось пойти с 0,3, чтобы моя работа.

final double ASPECT_TOLERANCE = 0.3; // this was 0.1

Кроме того, я обнаружил, что если я позвоню startPreview() в surfaceCreated(SurfaceHolder holder), Auto Focus будет работать с более высоким соотношением предварительного просмотра. Но тогда предварительный просмотр не будет работать вообще на галактике.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top