Cámara personalizada Android congelar después del zoom

Tengo una cámara personalizada que funciona bien en algunos dispositivos. Funciona bien en Samsung Galaxy Gran Duos (samsung-gt i9082, Android 4.2.2), pero cuando intento capturar una imagen, que he ampliado antes, se congela, no se bloquea, la única manera de salir es presionar el botón de retroceso. Esto ocurre sólo en el Samsung Galaxy Gran Duos.

El código que usé para tomar una foto:

Camera.PictureCallback photoCallback = new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { try { } catch (Exception e) { if (flePicture== null){ Log.d("camera", "Error creating media file, check storage permissions: " + e.getMessage()); return; } } try { FileOutputStream fos = new FileOutputStream(flePicture); fos.write(data); fos.close(); } catch (FileNotFoundException e) { Log.d("camera", "File not found: " + e.getMessage()); } catch (IOException e) { Log.d("camera", "Error accessing file: " + e.getMessage()); } } }; 

Y el código utilizado para el zoom:

 private void zoomIn() { if (pblnInPreview) { Camera.Parameters parameters = camCamera.getParameters(); if ((parameters.getZoom() + 1) < parameters.getMaxZoom()) { parameters.setZoom(parameters.getZoom() + 1); camCamera.setParameters(parameters); } } } 

LogCat:

 04-07 17:21:14.386: E/BrcmCamera(130): processControlBuffer: Corrupt stream error raised by camera - sensor communication failure 

Creo que usted necesita para confirmar que su cámara es compatible con el zoom utilizando camera.isZoomSupported() entonces si se apoya es necesario cancelar el enfoque automático con camera.cancelAutoFocus() para evitar las distorsiones de la imagen. Pero esto sólo funcionará si su dispositivo realmente admite el zoom. Si no es necesario capturar la imagen de retención y acercar después utilizando Bitmap.createBitmap la sección que desee.

Esto no es una respuesta fuertemente relacionada. Lo sé.

Pero me gustaría decir que Samsung 4.2.2 tiene muchos problemas defectuosos. Tiene bloqueo de ClipboardManager, accidente de ActionBar AppCompat, y así sucesivamente.

Sólo tienes que filtrarlo con la cláusula simple if y salvar tu vida.

 if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR1 && Build.MANUFACTURER.toUpperCase().contains("SAMSUNG")){ // ignore }else{ // your logic on the go } 

¿Estás de nuevo iniciar una vista previa de la cámara después de tomar una foto?

Agregue este camera.startPreview();

Prueba esto

  Camera.PictureCallback photoCallback = new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { camera.startPreview(); try { } catch (Exception e) { if (flePicture== null){ Log.d("camera", "Error creating media file, check storage permissions: " + e.getMessage()); return; } } try { FileOutputStream fos = new FileOutputStream(flePicture); fos.write(data); fos.close(); } catch (FileNotFoundException e) { Log.d("camera", "File not found: " + e.getMessage()); } catch (IOException e) { Log.d("camera", "Error accessing file: " + e.getMessage()); } } }; 

Es un problema con el tipo específico de kernel.

Pruebe este enfoque.

 private static final String TAG = Test.class.getSimpleName(); private boolean isPreviewStarted; private Camera camera; Camera.PictureCallback photoCallback = new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { // check if this needs to stop the preview if (deviceNeedsStopPreviewToShoot()) { stopPreview(); } // save your image // restart preview if needed. startPreview(); } }; public void startPreview() { if (!isPreviewStarted && camera != null) { camera.startPreview(); isPreviewStarted = true; } } public void stopPreview() { if (isPreviewStarted && camera != null) { camera.stopPreview(); isPreviewStarted = false; } } public static boolean deviceNeedsStopPreviewToShoot() { String[] oldDevices = {"smdk4210", "aries"}; boolean needs = Arrays.asList(oldDevices).contains(Build.BOARD); Log.e(TAG, "Device " + Build.BOARD + (needs ? " needs " : " doesn't need ") + "to stop preview"); return needs; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.