plus play pantalla panoramica moto k10 hacer configurar como captura camara android camera

android - play - configurar camara lg k10 2017



Problemas al capturar varias fotos: la aplicación deja de responder, la vista previa de la cámara cambia a verde y no se guarda ninguna imagen (4)

No encontré ningún soporte API para esto. Y llamar repetidamente al método takePicture desde el bucle no funciona. Entonces, obtengo una solución. El código todavía está en loop pero ahora estoy usando Thread;

private class CaptureThread extends Thread { @Override public void run() { int count = 0; while(count < mNo) { mFileName = mLocation + "/pic" + count + ".jpg"; mCamera.takePicture(null, mPictureCallback, mPictureCallback); count++; try { Thread.sleep(3000); } catch (InterruptedException exception) { exception.printStackTrace(); } } } }

Capturé la foto con una cámara en Android. Pero cuando traté de capturar 5 fotos a la vez, la aplicación deja de responder, la vista previa de la cámara cambia a verde y no se guarda ninguna imagen. Lo que vi en el seguimiento de la pila es el siguiente (parcial)

03-17 14: 19: 54.804: INFO / QualcommCameraHardware (19268): deinitPreview E 03-17 14: 19: 54.804: INFO / QualcommCameraHardware (19268): deinitPreview X 03-17 14: 19: 54.804: DEBUG / QualcommCameraHardware (19268) ): frame_thread X 03-17 14: 19: 54.834: DEBUG / QualcommCameraHardware (19268): snapshot_thread E 03-17 14: 19: 54.854: DEPURADOR / CameraService (19268): takePicture (pid 20509) 03-17 14:19: 54.884: WARN / AudioFlinger (19268): escritura bloqueada durante 85 msecs 03-17 14: 19: 55.154: DEBUG / CameraService (19268): postShutter 03-17 14: 19: 55.284: DEBUG / CameraService (19268): postRaw 03- 17 14: 19: 55.314: DEBUG / QualcommCameraHardware (19268): snapshot_thread X 03-17 14: 19: 55.344: DEBUG / QualcommCameraHardware (19268): snapshot_thread E 03-17 14: 19: 55.364: DEBUG / CameraService (19268): takePicture (pid 20509) 03-17 14: 19: 55.984: DEBUG / CameraService (19268): postShutter 03-17 14: 19: 56.064: DEPURADOR / CameraService (19268): postRaw 03-17 14: 19: 56.074: ERROR / QualcommCameraHardware (19268): native_jpeg_encode: jpeg_encoder_encode failed. 03-17 14: 19: 56.074: ERROR / QualcommCameraHardware (19268): la codificación jpeg falló 03-17 14: 19: 56.084: DEBUG / QualcommCameraHardware (19268): snapshot_thread X 03-17 14: 19: 56.154: INFO / DEBUG ( 19267): * * * * * * * * * * * * * * * * 03-17 14: 19: 56.164: INFORMACIÓN / DEPURACIÓN (19267): Huella digital de compilación: ''google_ion / google_ion / zafiro / zafiro: 1.6 / DRC83 / 14721: user / adp, test-keys ''03-17 14: 19: 56.164: INFO / DEBUG (19267): pid: 19268, tid: 20813 >>> / system / bin / mediaserver ... .... .. 14: 19: 59.894: INFO / ServiceManager (46): el servicio ''media.camera'' murió 03-17 14: 19: 59.894: WARN / Camera (20509): ¡El servidor de la cámara se ha apagado! 03-17 14: 19: 59.894: WARN / Cámara (20509): ICamera murió 03-17 14: 19: 59.894: ERROR / Cámara (20509): Error 100 03-17 14: 19: 59.915: WARN / AudioSystem (71 ): El servidor AudioFlinger murió! 03-17 14: 20: 00.014: INFO / Proceso (71): señal de envío. PID: 18636 SIG: 3 03-17 14: 20: 00.054: INFO / dalvikvm (18636): threadid = 7: reaccionando a la señal 3

Estoy llamando al método takePicture en un bucle para capturar varias fotos;

for(int m = 0 ; m < 6; m++) { mPrimCamera.takePicture(null, mPictureCallbackMet, mPictureCallbackMet); }

Estoy haciendo esto en HTC Magic con Android 1.6. Creo que estoy usando la forma incorrecta de tomar varias fotos. ¿Cuál es la forma correcta de capturar varias fotos con la API de Android?


Puede tomar la siguiente foto solo después de llamar al método Camera.PictureCallback.onPictureTaken y se vuelve a iniciar la vista previa de la cámara.

private void takePhoto() { if (!(cameraPreview.isRunning())) { Log.i(LOG_TAG, "Camera is not ready. Skip frame"); return; } camera.takePicture(null, null, this); cameraPreview.onPictureTook(); } public void onPictureTaken(byte[] data, Camera camera) { // save photo cameraPreview.start(); } public class CameraPreview extends SurfaceView { private boolean previewRunning = false; /** * Should be called after calling camera.takePicture */ public void onPictureTook() { previewRunning = false; } public boolean isRunning() { return previewRunning; } public void start() { try { camera.setPreviewDisplay(surfaceHolder); camera.startPreview(); previewRunning = true; } catch (Exception ignored) { Log.e(LOG_TAG, "Error starting camera preview", ignored); } } }


No estoy seguro de que la API de Android sea compatible con un modo de ráfaga. Una cosa es segura, no se puede simplemente llamar a takePicture() en un bucle así. Eso es solo abusar de esos pobres api.

¿Qué le onPictureTaken() tomar la próxima fotografía en onPictureTaken() ? (Obviamente tienes que mantener un registro de la cantidad de fotos tomadas, etc.)

Además, como dice la documentación , no suponga que funcionará en todos los dispositivos.

Escribí la respuesta anterior en 2011, desde entonces la cámara ha evolucionado

EDITAR: El modo de ráfaga ahora se admite en Camera2: https://developer.android.com/reference/android/hardware/camera2/package-summary.html

Ver https://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.html