Frage

Unsere Anwendung zeigt eine Kameravorschau und es scheint zu funktionieren auf allen Handys mit Ausnahme des Motorola Droid, wo wir eine Laufzeitausnahme, wenn wir die Kameraparameter einstellen:

    java.lang.RuntimeException: setParameters failed
   at android.hardware.Camera.native_setParameters(Native Method)
   at android.hardware.Camera.setParameters(Camera.java:611)
   at com.highwaynorth.andrometer.CameraPreviewSurfaceView.surfaceChanged(CameraPreviewSurfaceView.java:57)
   at android.view.SurfaceView.updateWindow(SurfaceView.java:460)
   at android.view.SurfaceView.dispatchDraw(SurfaceView.java:287)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1525)

Hier ist der Code für surfaceChanged (), die größtenteils von APIDemos

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
   // Now that the size is known, set up the camera parameters and begin
   // the preview.
   Camera.Parameters parameters = mCamera.getParameters();
   parameters.setPreviewSize(w, h);
   parameters.setPictureFormat(PixelFormat.JPEG);
   parameters.setPreviewFormat(PixelFormat.YCbCr_422_SP);
   parameters.setPreviewFrameRate(1);
   mCamera.setParameters(parameters);
   mCamera.startPreview();

}

Wer weiß, was falsch ist, wie wir die Parameter setzen, die die Ausnahme auf dem Motorola Droid verursachen würde?

War es hilfreich?

Lösung

Ich kann Ihnen sagen, ist Ihr Problem mit einem der beiden folgenden Zeilen:

parameters.setPreviewFormat(PixelFormat.YCbCr_422_SP);
parameters.setPreviewFrameRate(1);

Ich weiß das, weil der Rest des Codes genau das, was in einigen Kameraproben in meinem Buch, das ich tue, und sie haben auf einem DROID getestet.

Wir empfehlen Ihnen, getSupportedPreviewFormats() und getSupportedPreviewFrameRates() auf Ihrem Camera.Parameters zu-Objekt verwenden, um zu sehen, ob das betreffende Gerät die Rate Format und Rahmen unterstützt Sie suchen. Beachten Sie, dass diese Methoden sind neu in Android 2.0, so dass sie auf den DROID / Milestone arbeiten werden (und vermutlich das Nexus One), aber sonst nichts zum Zeitpunkt des Schreibens dieses Artikels. Wenn Sie ältere Android API-Versionen zielen, werden Sie zur Verwendung Reflexion oder einige Classloading Tricks müssen diese Methoden Arbeit auf Android 2.0 zu erhalten und auf älteren Versionen übersprungen werden.

Andere Tipps

Sie sollten prüfen, welche Vorschau-Formate zur Verfügung stehen, um sicherzustellen, können Sie sich auf so viele Geräte wie möglich ausgeführt werden.

Es sieht aus wie DROID unterstützt PixelFormat.YCbCr_422_I PixelFormat.YCbCr_420_SP

können Sie die folgende Methode verwenden, um eine Liste der verfügbaren Formate zu erhalten. getSupportedPreviewFormats ()

Pixelformate

Eine andere Sache, können Sie untersuchen wollen:

Ich erlebe dieses Problem für Geräte Motoblur und aktualisiert bis 2,3 (insbesondere Droid2, DroidX und Atrix mit Verizon) ausgeführt wird.

Die Kameraparameter waren in Ordnung, aber in Layout / capture.xml der Hintergrund des ViewfinderView eingestellt ist transparent:

<com.google.zxing.client.android.ViewfinderView
   android:id="@+id/viewfinder_view" 
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   android:background="@color/transparent"
/>

Nun, es sieht aus, dass transparent für Motoblur auf Android 2.3 nicht transparent ist ...

Entfernen

android:background="@color/transparent"

vom Sucher mein Problem gelöst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top