2016-04-26 12 views
0

In meiner Android App ist der Fokusmodus auf FOCUS_MODE_CONTINUOUS_PICTURE. eingestellt. Hier sind einige relevante Code:Der Autofokus der Android-Kamera funktioniert nach einiger Zeit nicht mehr

private Camera.AutoFocusCallback _cbAutoFocus = new Camera.AutoFocusCallback() { 

    private int _count = 0; 
    @Override 
    public void onAutoFocus(boolean success, Camera camera) { 
     if (success) { 
      _count++; 
      if ((_count % 500) == 0) { 
       Log.d("MyCam Focus", Integer.toString(_count)); 
      } 
      _camera.cancelAutoFocus(); 
     } 
     _camera.autoFocus(_cbAutoFocus); 
    } 
}; 

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 

    try { 
     if (this._camera != null) { 
      this._camera.setPreviewDisplay(holder); 
      this._camera.startPreview(); 
      this._camera.autoFocus(this._cbAutoFocus); 
     } 
    }catch(Exception e) { 
     Log.e("Camera Surface change", e.getMessage()); 
    } 
} 

Als ich die Kamera über einige gedruckten Text zu bewegen, scheint die Kamera auf Autofokus richtig für einige Zeit. Aber nach einer Weile hört es auf zu fokussieren und ich bekomme keinen Erfolg in meinem Code onAutoFocus. Ich frage mich, ob jemand irgendwelche Einsichten hat. Grüße.

Antwort

0

Es stellt sich heraus, dass FOCUS_MODE_CONTINUOUS_PICTURE oder FOCUS_MODE_CONTINUOUS_VIDEO nicht immer funktionieren, auch wenn sie vom Gerät unterstützt werden. Es scheint, dass es besser ist, FOCUS_MODE_AUTO zu verwenden und jedes Mal, wenn der Fokus gewünscht wird, autofocus() manuell aufzurufen.

0

Haben Sie dies im API documentation:

Anwendungen Autofokus (AutoFocusCallback) in diesem Modus aufrufen können. Wenn der Autofokus in der Mitte des Scanvorgangs ist, wird der Fokus-Callback zurückgeben, wenn er abgeschlossen ist. Wenn der Autofokus nicht scannt, wird der Fokus Rückruf sofort mit einem booleschen Wert zurückgeben, der angibt, ob der Fokus scharf ist oder nicht . Die Apps können dann entscheiden, ob sie sofort ein Bild aufnehmen oder den Fokusmodus auf setzen möchten, und einen vollständigen Autofokus-Zyklus ausführen. Die Fokusposition ist nach dem AutoFocus-Aufruf gesperrt. Wenn Anwendungen den kontinuierlichen Fokus fortsetzen möchten, muss cancelAutoFocus aufgerufen werden. Beim Neustarten der Vorschau wird der kontinuierliche Autofokus nicht fortgesetzt . Um den kontinuierlichen Fokus zu stoppen, sollten die Anwendungen den Fokusmodus auf andere Modi ändern.

Wenn die Methode autoFocus aufgerufen wird, scheint der Autofokus gesperrt zu sein. Rufen Sie cancelAutoFocus auf, um den Autofokus fortzusetzen.

Im OnAutoFocus wird am Ende der Methode (unabhängig vom Erfolg) autoFocus aufgerufen, die den Fokus dann unabhängig von jeder weiteren Bewegung der Kamera scharf stellen wird. Ist das beabsichtigt?

+0

Wenn ich nicht erneut Autofokus() aufrufen, wird mein Rückruf nach dem ersten Lauf nie aufgerufen. – Peter