Domanda

La nostra applicazione visualizza un'anteprima fotocamera e sembra funzionare bene su tutti i telefoni ad eccezione del Motorola Droid dove otteniamo un'eccezione di runtime quando abbiamo fissato i parametri della fotocamera:

    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)

Ecco il codice per surfaceChanged (), che è in gran parte tratto da 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();

}

Qualcuno sa che cosa è sbagliato con il modo stiamo impostando i parametri che sarebbero causare l'eccezione sul Motorola Droid?

È stato utile?

Soluzione

posso dirvi il vostro problema è con uno dei seguenti due righe:

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

Lo so, perché il resto di tale codice è solo quello che faccio in alcuni campioni della fotocamera nel mio libro, e sono stati testati su DROID.

Si potrebbe desiderare di utilizzare getSupportedPreviewFormats() e getSupportedPreviewFrameRates() sulle tue Camera.Parameters opporsi, per vedere se il dispositivo in questione supporta formato e dalla velocità fotogramma che cercate. Si noti che questi metodi sono nuovi per Android 2.0, in modo che lavoreranno sul Droid / Milestone (e, presumibilmente, il Nexus One), ma niente altro al momento in cui scriviamo. Se si prendono di mira le versioni API di Android meno recenti, è necessario utilizzare la riflessione o alcuni trucchi classloading per ottenere questi metodi per lavorare su Android 2.0 e essere saltati su versioni precedenti.

Altri suggerimenti

Si dovrebbe verificare che cosa anteprima formati sono a disposizione per assicurarsi la possibilità di eseguire sul maggior numero di dispositivi possibile.

Sembra che supporti DROID PixelFormat.YCbCr_422_I PixelFormat.YCbCr_420_SP

è possibile utilizzare il seguente metodo per ottenere un elenco dei formati disponibili. getSupportedPreviewFormats ()

Pixel Formati

Un'altra cosa che si potrebbe voler indagare:

sto sperimentando questo problema per i dispositivi che eseguono Motoblur e aggiornato a 2,3 (in particolare Droid2, DroidX e Atrix con Verizon).

I parametri della telecamera erano soddisfacenti, ma nel layout / capture.xml lo sfondo della ViewfinderView è impostato su trasparente:

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

Bene, sembra che trasparente per Motoblur su Android 2.3 non è così trasparente ...

rimozione

android:background="@color/transparent"

Dal mirino risolto il mio problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top