Cómo capturar una imagen y almacenarla con la cámara nativa de Android

Tengo un problema al capturar una imagen y almacenarla desde la aplicación de cámara nativa. Aquí hay una muestra de algunos de mi código.

_path = Environment.getExternalStorageDirectory() + "make_machine_example.jpg"; File file = new File( _path ); Uri outputFileUri = Uri.fromFile( file ); Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE ); intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri ); startActivityForResult( intent, 0 ); 

Después de que la imagen se haya tomado y me devuelven a mi actividad original, cuando navego a mi tarjeta sd a través de Android DDMS Explorador de archivos la imagen no está allí. Alguien sabe por qué esto no se está salvando?

¿Ha comprobado cuál es la salida de Environment.getExternalStorageDirectory (), porque si no contiene un separador de archivos de arrastre (/), su imagen terminará en un directorio que no reside en la tarjeta SD, como por ejemplo:

  /mnt/sdcardmake_machine_example.jpg 

Cuando lo que realmente quieres es:

  /mnt/sdcard/make_machine_example.jpg 

Intente este código en su lugar:

  _path = Environment.getExternalStorageDirectory() + File.separator + "make_machine_example.jpg"; 

Aquí estaba el producto final en caso de que alguien siga visitando este hilo:

 public class CameraCapture extends Activity { protected boolean _taken = true; File sdImageMainDirectory; protected static final String PHOTO_TAKEN = "photo_taken"; @Override public void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); File root = new File(Environment .getExternalStorageDirectory() + File.separator + "myDir" + File.separator); root.mkdirs(); sdImageMainDirectory = new File(root, "myPicName"); startCameraActivity(); } } catch (Exception e) { finish(); Toast.makeText(this, "Error occured. Please try again later.", Toast.LENGTH_SHORT).show(); } } protected void startCameraActivity() { Uri outputFileUri = Uri.fromFile(sdImageMainDirectory); Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(intent, 0); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case 0: finish(); break; case -1: try { StoreImage(this, Uri.parse(data.toURI()), sdImageMainDirectory); } catch (Exception e) { e.printStackTrace(); } finish(); startActivity(new Intent(CameraCapture.this, Home.class)); } } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { if (savedInstanceState.getBoolean(CameraCapture.PHOTO_TAKEN)) { _taken = true; } } @Override protected void onSaveInstanceState(Bundle outState) { outState.putBoolean(CameraCapture.PHOTO_TAKEN, _taken); } public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) { Bitmap bm = null; try { bm = Media.getBitmap(mContext.getContentResolver(), imageLoc); FileOutputStream out = new FileOutputStream(imageDir); bm.compress(Bitmap.CompressFormat.JPEG, 100, out); bm.recycle(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } 

1. Solo usa

 new File(Environment.getExternalStorageDirectory(), "make_machine_example.jpg"); 

Y no se preocupe por los separadores.

2. Se enfrentó al mismo problema antes. Los teléfonos SenseUI tienen una aplicación de cámara personalizada que no crea archivos. ¿Qué dispositivo está utilizando? Puede que ya esté arreglado en los dispositivos más recientes, pero también puede ser un problema. Así que aquí está una muestra completa de cómo superarlo. Problemas al guardar una foto en un archivo .

Debe realizar un escaneo de medios después de guardar la imagen

  sendBroadcast(new Intent( Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 

Agregue esta línea al archivo AndroidManifest.xml y elimine la extensión make_machine_example:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Comenzará a capturar la foto y almacenarla en la tarjeta SD.

  • Obtener el ángulo de visión del dispositivo de la cámara Android
  • Revisión de imagen no mostrada después de camera.takePicture
  • Problemas al capturar varias fotos: la aplicación deja de responder, la vista previa de la cámara se vuelve verde y no se guarda ninguna imagen
  • facingMode en MediaDevices.getUserMedia no parece funcionar en el último Android Chrome (v53)
  • Ajuste ISO de la cámara / velocidad de obturación
  • Cómo configurar la orientación de la cámara Android correctamente?
  • Vista previa de la cámara en Android - extraño en Samsung Galaxy S
  • ¿Cómo funciona un obturador remoto para trabajar con la cámara en Android / iOS?
  • Reconocimiento de la cara de la cámara
  • RuntimeException en Camera.setParameters () en el nexo uno
  • Guardar bitmap en tarjeta SD sin comprimirla en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.