Abra una aplicación de cámara por intención y guardar la imagen en el SD y imageView

Posible duplicado:
Uso de la cámara y almacenamiento del resultado capturado en SDCard en android

Quiero conseguir la imagen de la aplicación de cámara, guardarlo en SD y establecer imageView. Hice un código abajo. Ahorro y imageView a veces funciona. Pero a veces la imagen se guarda en SD y imageView no funciona.

Cuando imageView no funciona, parece que mOutUri se convierte en null en onActivityResult.

He intentado guardar un mOutUri en SharedPreferences en clkbutton. Puedo ver el uri en onActivityResult pero imageView no funciona. En este momento, mOutUri también es nulo.

public void clkbutton(View v){ Intent intent = new Intent(); // open camera app intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); // save data in SD card Date date = new Date(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd-kk-mm-ss"); String newPicFile = df.format(date) + ".jpg"; mNewPicFile = newPicFile; String outPath = "/sdcard/" + newPicFile; File outFile = new File(outPath); mOutUri = Uri.fromFile(outFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, mOutUri); startActivityForResult(intent, REQUEST_CAPTURE_IMAGE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { ImageView imageView = (ImageView) findViewById(R.id.image_view); imageView.setImageURI(mOutUri); } 

Es tan extraño que a veces errores ya veces funciona.

En onActivityResult antes de setImageUri debe comprobar si existe un archivo. Puede perder el contenido de mOutUri cuando la aplicación cambia de orientación y sucede en algún momento cuando abre la cámara. Debe implementar en la actividad onSaveInstanceState donde almacena en las preferencias su uri y onRestoreInstanceState donde restaura su uri.

Pruebe el código siguiente:

  static Uri capturedImageUri=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.imageView = (ImageView)this.findViewById(R.id.imageView1); Button photoButton = (Button) this.findViewById(R.id.button1); photoButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Calendar cal = Calendar.getInstance(); File file = new File(Environment.getExternalStorageDirectory(), (cal.getTimeInMillis()+".jpg")); if(!file.exists()){ try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ file.delete(); try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } capturedImageUri = Uri.fromFile(file); Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri); startActivityForResult(i, CAMERA_RESULT); } }); protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERA_REQUEST) { //Bitmap photo = (Bitmap) data.getExtras().get("data"); //imageView.setImageBitmap(photo); try { Bitmap bitmap = MediaStore.Images.Media.getBitmap( getApplicationContext().getContentResolver(), capturedImageUri); imageView.setImageBitmap(bitmap); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

Y también no se olvide de agregar algunos permisos en el archivo de manifets android como:

  `note: add permission WRITE_EXTERNAL_STORAGE in manifest file.` 
  • Android abrir o crear base de datos
  • evitando un bloqueo cuando alguien monta una tarjeta SD de Android
  • Instalación de la aplicación en la tarjeta SD en Android sdk 2.2
  • Android: Guardar archivos en la tarjeta SD
  • Java.io.FileNotFoundException (permiso denegado) Al intentar escribir en el sdcard de Android
  • Cómo leer un archivo de texto seleccionado de sdcard en android
  • ¿Cómo se hace un apk crear un archivo en el sdcard cuando el apk está instalado?
  • FileNotFoundException + Escribir un archivo en la tarjeta SD
  • Abrir un archivo de texto de 12kb toma WAY demasiado tiempo ...?
  • Android: buenas prácticas para organizar dirs y archivos en almacenamiento Tarjeta SD?
  • No se puede guardar ni cargar entero con las preferencias
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.