Anteprima della fotocamera su Motorola Droid
-
19-09-2019 - |
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?
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 ()
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.