Pregunta

Nuestra aplicación muestra una vista previa de la cámara y parece que funciona bien en todos los teléfonos excepto para el Droid de Motorola, donde se obtiene una excepción de ejecución cuando fijamos los parámetros de la cámara:

    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)

Este es el código para surfaceChanged () que se toma en su mayoría de 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();

}

¿Alguien sabe lo que está mal con la forma en que estamos estableciendo los parámetros que ser la causa de la excepción en el Droid de Motorola?

¿Fue útil?

Solución

Les puedo decir que su problema es con una de las dos líneas siguientes:

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

Sé que esto, porque el resto de ese código es simplemente lo que hago en algunas muestras de la cámara en mi libro, y que han sido probados en un androide.

Es posible que desee utilizar getSupportedPreviewFormats() y getSupportedPreviewFrameRates() en sus Camera.Parameters oponerse, para ver si el dispositivo en cuestión es compatible con el tipo de formato y el marco que está buscando. Tenga en cuenta que estos métodos son nuevos en Android 2.0, por lo que va a trabajar en el Droid / Milestone (y, presumiblemente, el Nexus One), pero nada más en el momento de escribir estas líneas. Si el idioma de las versiones anteriores de la API de Android, tendrá que utilizar la reflexión o algunos trucos de carga de clase para conseguir que estos métodos funcionen en Android 2.0 y ser omitidos en las versiones anteriores.

Otros consejos

Usted debe verificar lo previsualización formatos están disponibles para asegurarse de que puede funcionar en tantos dispositivos como sea posible.

Parece soportes DROID PixelFormat.YCbCr_422_I PixelFormat.YCbCr_420_SP

se puede utilizar el siguiente método para obtener una lista de formatos disponibles. getSupportedPreviewFormats ()

píxeles Formatos

Otra cosa que puede que desee investigar:

Estoy experimentando este problema para dispositivos con Motoblur y actualizada a 2,3 (especialmente Droid2, DroidX y Atrix con Verizon).

Los parámetros de la cámara estaban bien, pero en diseño / capture.xml el fondo de la ViewfinderView es transparente:

<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"
/>

Bueno, parece que transparente para Motoblur en Android 2.3 no es tan transparente ...

eliminar

android:background="@color/transparent"

En el visor resolvió mi problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top