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:
- No se puede mostrar 2 instancias de mi SurfaceView personalizado
- Android: El tamaño de la vista previa de la cámara admitida es incorrecto
- Color de fondo de relleno de lienzo de Android (aplicación de lona)
- Android: Crash: Línea de archivo XML binario: Error al inflar la clase (usando SurfaceView)
- Evite dibujar más allá del lienzo con SurfaceView
<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" />
- Android Take Captura de pantalla de Vista de superficie muestra negro
- Vista previa de la cámara Android en una pantalla cuadrada estirada
- Android: hilo deteniéndose intermitentemente
- ¿Por qué onTouchEvent de SurfaceView llamado unos segundos retrasados?
- Cómo adjuntar MediaPlayer con SurfaceView en android?
- Android: dibujo en un nuevo lienzo
- SurfaceView y ANownWindow
- Uso de surfaceView para capturar un video
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 ().
- ¿Cuál es la diferencia entre TypedArray.getInteger () y TypedArray.getInt ()?
- Cómo depurar una aplicación en Android con GDBSERVER?