studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android image file bitmap decode

para - manual de programacion android pdf



file.exists() devuelve falso para el archivo existente en Android (2)

En mi aplicación, el usuario puede seleccionar una imagen desde una tarjeta SD y establecerla como una imagen de perfil. Todo funciona bien, pero cuando el usuario selecciona la imagen de la carpeta de whatsapp, la imagen de la tarjeta SD no se puede decodificar.

Estoy usando el siguiente código para decodificar el archivo y mostrarlo en ImageView.

if (imgFile.exists()) { Bitmap myBitmap = BitmapFactory.decodeFile(imgFile .getAbsolutePath()); imgProfilePic.setImageBitmap(myBitmap); myBitmap = null; System.gc(); Runtime.getRuntime().gc(); }

Estoy obteniendo la ruta de la imagen /storage/sdcard0/WhatsApp/Media/WhatsApp Images/IMG-20130804-WA0000.jpg y existe en sdcard pero file.exists siempre devuelve false. Funciona bien si el usuario selecciona la imagen de otras carpetas en lugar de WhatsApp.

Actualizar

Estoy siguiendo pasos como

1. click on profilepic(imageview). 2. select options(from camera,galerry,or edit) 3. open selected or captured image in CropImage Activity. 4. display cropped image.

Cualquier ayuda sería muy apreciada, gracias.


Estaba modificando la imagen de otras aplicaciones. Creo que este podría ser el problema. Entonces, ¿qué hice?

  1. seleccionar imagen y obtener ruta en onActivityResult()
  2. copiar la imagen de esta ruta en el archivo temporal utilizando el código siguiente
  3. usar archivo temporal para recortar y procesar otros

private void copyFile(File sourceFile, File destFile) throws IOException { if (!sourceFile.exists()) { return; } FileChannel source = null; FileChannel destination = null; source = new FileInputStream(sourceFile).getChannel(); destination = new FileOutputStream(destFile).getChannel(); if (destination != null && source != null) { destination.transferFrom(source, 0, source.size()); } if (source != null) { source.close(); } if (destination != null) { destination.close(); } }

Espero que esto pueda ayudar a alguien más.


Si su método ImageFile.exists() da false en android, pero existe en la memoria, definitivamente no ha otorgado el permiso Write-external-storage en el archivo Manifest de su proyecto. Agregue este permiso en el manifiesto de su proyecto:

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