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?
- seleccionar imagen y obtener ruta en
onActivityResult()
- copiar la imagen de esta ruta en el archivo temporal utilizando el código siguiente
- 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" />