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:
- Genymotion congela todo Ubuntu Desktop
- Android Studio se congela al iniciar
- ¿Por qué estoy recibiendo: threadid = 3: reaccionar a la señal 3 y congelación de juego (AndEngine)?
- Android Studio mantiene la congelación incluso con la nueva versión de 2.2.3 para Windows
- Android AlertDialog congela la aplicación unos segundos después de mostrarse - la causa parece relacionada con OpenSL
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
- La aplicación cuelga / se congela cuando se utiliza camera.open () - Reinicio del dispositivo necesario
- Aplicación congelada en Camera.Release ()
- Nexus 10 camera.release cuelga durante 30 segundos
- Mi aplicación se bloquea, ¿cómo implementar Threads en ella?
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; }