2012-05-28 15 views
10

Auf einigen Geräten wird onPreviewFrame nicht aufgerufen, wenn keine SurfaceView festgelegt wurde, um die Kameravorschau anzuzeigen. Allerdings handle ich mit der Kamera in einem Dienst, so dass ich keinen SurfaceView einstellen kann, aber ich möchte sowieso keine sichtbare Vorschau haben.Android: onPreviewFrame nie ohne SurfaceView

Wie kann das gemacht werden? Kann ich programmgesteuert ein SurfaceView erstellen und mit Camera::setPreviewDisplay festlegen?

Das muss möglich sein oder nicht?

Es funktioniert auf fast jedem Handy ohne SurfaceView aber nicht auf dem HTC One X und Google Nexus One ...

Antwort

4

Nach this question, ein SurfaceView in Code funktioniert gut zu schaffen. Obwohl ich nicht denke, dass Sie es durch einen Service schaffen können.

Ein anderer Ansatz besteht darin, ein 1px-1px SurfaceView in einem RelativeLayout zu erstellen und es mit einer anderen Ansicht darüber zu verstecken. (Sichtbarkeit sollte immer noch VISIBLE sein). Wir verwenden diesen Trick für Path Kamera UI, wo wir Vorschaupuffer über OpenGL rendern und es funktioniert gut.

1

Entsprechend der Dokumentation, die sofort konfiguriert wird, ist eine sichtbare und angezeigte Oberflächenansicht erforderlich, um die Kameravorschau zu aktivieren. Es kann jedoch überlagert werden

0

Ab API 11 können Sie einen SurfaceTexture anstelle von SurfaceView verwenden, um Bilder von der Kamera zu erhalten. Verwenden Sie dann anstatt Camera.setPreviewDisplay einfach Camera.setPreviewTexture.

This Antwort sowie this one diskutieren diesen Punkt.