Android: toma fotos sin vista previa

Estoy tratando de tomar una foto sin vista previa, inmediatamente cuando mi aplicación se ejecuta y después de eso para guardar la imagen en la nueva carpeta – "pictures123", en la carpeta raíz. ¿Podría alguien por favor decirme lo que está mal en mi código?

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); File directory = new File(Environment.getExternalStorageDirectory() + "/pictures123/"); if (!directory.exists()) { directory.mkdir(); } Camera camera = Camera.open(0); Camera.Parameters parameters = camera.getParameters(); parameters.setPictureFormat(ImageFormat.JPEG); camera.setParameters(parameters); SurfaceView mview = new SurfaceView(getBaseContext()); camera.setPreviewDisplay(mview.getHolder()); camera.setPreviewDisplay(null); camera.startPreview(); camera.takePicture(null,null,photoCallback); camera.stopPreview(); } Camera.PictureCallback photoCallback=new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { try { String root = Environment.getExternalStorageDirectory().toString(); File myDir = new File(root + "/pictures123"); File file = new File (myDir, "pic1.jpeg"); FileOutputStream out = new FileOutputStream(file); out.write(data); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finish(); } }; 

Permisos:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> 

No puedes tomar una foto sin una vista previa, pero no tienes que mostrar la vista previa en la pantalla. Puede dirigir la salida a SurfaceTexture en su lugar (API 11+).

Vea esta respuesta para más detalles.

Creo que el principal problema es que usted está llamando takePicture inmediatamente después de startPreview que realmente lleva tiempo para completar su configuración. Así que añadir un retraso entre los dos podría solucionar temporalmente este problema, busque aquí más detalles .

Es imposible tomar una foto sin previo aviso. Usted debe leer la referencia en línea de Android: http://developer.android.com/reference/android/hardware/Camera.html#takePicture .

Nota: Este método sólo es válido cuando la vista previa está activa (después de startPreview ()). La vista previa se detendrá después de tomar la imagen; Las personas que llaman deben llamar a startPreview () de nuevo si quieren volver a iniciar la vista previa o tomar más fotos. Esto no debe llamarse entre start () y stop ().

  • Uso de la API de la cámara android para mostrar la alimentación de la cámara
  • Tomar una foto lo más rápido posible con la API de la cámara en Android
  • Efecto de zoom en Android SurfaceView
  • Android glSurfaceView con superposición con XML / Java
  • Android, lienzo: ¿Cómo puedo borrar (eliminar contenidos de) un lienzo (= bitmaps), que viven en una surfaceView?
  • Vista previa de Android SurfaceView borrosa
  • Cómo cambiar la cámara Android a la vertical en la vista de superficie?
  • Android Vista vs SurfaceView vs GLSurfaceView para la aplicación de dibujo 2D con Zoomable interfaz de usuario
  • Obtener información de GPU en Android sin SurfaceView
  • Tome fotos sin previsualizar Android
  • Comprensión de los conceptos de lienzo y superficie
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.