Question

Notre application affiche un aperçu de la caméra et il semble fonctionner très bien sur tous les téléphones, sauf pour le Motorola Droid où nous obtenons une exception d'exécution lorsque nous avons fixé les paramètres de la caméra:

    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)

Voici le code pour surfaceChanged () qui est la plupart du temps pris 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();

}

Quelqu'un sait ce qui ne va pas avec la façon dont nous fixons les paramètres qui seraient à l'origine l'exception sur le Motorola Droid?

Était-ce utile?

La solution

Je peux vous dire que votre problème est avec l'une des deux lignes suivantes:

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

Je sais que cela, parce que le reste de ce code est juste ce que je fais dans certains échantillons de la caméra dans mon livre, et ils ont été testés sur un droïde.

Vous voudrez peut-être utiliser getSupportedPreviewFormats() et getSupportedPreviewFrameRates() sur votre Camera.Parameters objet, pour voir si l'appareil en question prend en charge le format et la fréquence d'images que vous recherchez. Notez que ces méthodes sont nouvelles pour Android 2.0, donc ils vont travailler sur le DROID / Milestone (et, sans doute, le Nexus One), mais rien d'autre au moment où nous écrivons ces lignes. Si vous ciblez les versions Android API anciens, vous devrez utiliser la réflexion ou quelques astuces pour obtenir ces chargement de classes méthodes pour travailler sur Android 2.0 et être sautées sur les anciennes versions.

Autres conseils

Vous devriez vérifier quels formats sont disponibles aperçu pour vous assurer que vous pouvez exécuter sur autant de dispositifs que possible.

On dirait que les supports DROID PixelFormat.YCbCr_422_I PixelFormat.YCbCr_420_SP

vous pouvez utiliser la méthode suivante pour obtenir une liste des formats disponibles. getSupportedPreviewFormats ()

Formats Pixel

Une autre chose que vous voudrez peut-être enquêter sur:

Je rencontre ce problème pour les appareils exécutant Motoblur et mis à jour à 2,3 (en particulier Droid2, DroidX et Atrix avec Verizon).

Les paramètres de l'appareil photo étaient très bien, mais dans la mise en page / capture.xml l'arrière-plan de l'ViewfinderView est réglé sur 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"
/>

Eh bien, il semble que transparent pour Motoblur sur Android 2.3 est pas transparent ...

enlever

android:background="@color/transparent"

de la ViewFinder a résolu mon problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top