Kamera Vorschau auf Motorola Droid
-
19-09-2019 - |
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?
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 ()
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.