2009-06-26 8 views
4

Mögliche Duplizieren:
Android Camera will not work. startPreview failsCamera.setPreviewDisplay() throws Exception

Ich versuche, eine Kamera-Vorschau in einem benutzerdefinierten Surface zu setzen, aber ich erhalte eine Ausnahme jedes Mal, wenn ich die execute Initialisierungsmethode.

Unten ist der Code für die Kameravorschau Initialisierung:

private void init(Context context) 
{ 
    setFocusable(true); 
    mRecording = false; 
    fileRW = new FileReaderWriter(); 
    frameCount = 0; 
    if(mCamera == null) 
    { 
     mCamera = Camera.open(); 
    } 
    Parameters parameters = mCamera.getParameters(); 
    parameters.setPictureFormat(PixelFormat.JPEG); 
    mCamera.setParameters(parameters); 
    try { 
     mCamera.setPreviewDisplay(surfaceHolder); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    mCamera.startPreview(); 

} 

die Linie mCamera.setPreviewDisplay(surfaceHolder); löst eine Ausnahme (setPreviewDisplay failed) jedes Mal, wenn ich versuche, das Verfahren auszuführen.

Weiß jemand, was könnte falsch sein? Ich würde wirklich jede Hilfe von Ihnen schätzen.

Dank! `

+0

Nein, Jonathan, es ist kein doppeltes Problem. Einer davon war auf falsche Breiten-/Höhenparameter zurückzuführen, der andere auf API-Inkonsistenzen beim Festlegen des Typs. – Syndacate

Antwort

2

Der beste Ort setPreviewDisplay() zu nennen, ist in surfaceChanged() Wenn die Oberfläche gerade erstellt wird, wird surfaceChanged mindestens einmal aufgerufen werden und Sie können startPreview() und setPreviewDisplay dort. Wenn sich die Oberfläche ändert und die Vorschau bereits beginnt, können Sie stopPreview/setPreviewDisplay/startPreview dort. Auch wenn Ihre App die Größe der Oberfläche nicht ändert, ruft das Framework möglicherweise noch immer unerwartet surfaceChanged() auf, wenn die App aufgrund von Änderungen der Ausrichtung gestartet oder beendet wird. Deine App muss also wirklich richtig mit der Oberfläche umgehen. Sie können den Quellcode der Kameraanwendung in Android als Referenz verfolgen.

Das Code-Snippet in einer anderen Antwort funktioniert, wenn surfaceChanged() nur einmal im App-Lebenszyklus aufgerufen wird.

7

ich mit Jon Helle

ich heraus vollständig zustimmen konnte nicht, was für eine Woche los war, ignorierte ich die setType auf der Halteroberfläche, da das SDK sagte, es veraltet war, dh.

"Diese Methode ist veraltet. Dies wird ignoriert, dieser Wert wird bei Bedarf automatisch gesetzt."

Aber wenn Sie das nicht tun, wird es auf setPreview abstürzen. Dies läuft 1.5 SDK (ich brauche es rückwärts kompatibel zu sein) auf einem Galaxy S mit 2.1. Stellen Sie sicher, dass Sie den Typ festgelegt haben. Nicht ganz so automatisch wie die Dokumentation es klingen lässt.

Verwandte Themen