Vista previa en la cámara de Motorola Droid
-
19-09-2019 - |
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?
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 ()
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.