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.
- (Re) montaje de la tarjeta SD en el emulador de Android
- Abrir el selector de archivos de mi actividad de Android
- Creación de un archivo zip con algunos archivos en SDCard
- Android - Aplicación (apk) Tamaño máximo
- Android FileProvider para ext sdcard
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.
- Android: Guardar el archivo permanentemente (incluso después de borrar datos / desinstalar)
- Android: ubicación absoluta de la tarjeta SD externa
- ¿Establecer ubicación de instalación para Android 1.6?
- ACTION_GET_CONTENT: ¿Cómo obtener el fin del archivo al buscar varios tipos de archivo?
- Poner manualmente archivos en la tarjeta SD del emulador de Android
- Transmita la salida logcat de android a una tarjeta sd
- ¿Cómo obtener el espacio disponible en Android sdcard?
- File.canWrite () dice "true" pero no puedo escribir en almacenamiento extraíble (kit kat)
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.`