studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java android file uri delete-file

java - para - manual de programacion android pdf



¿Cómo borro archivos programáticamente en Android? (4)

Prueba este. Está funcionando para mí.

handler.postDelayed(new Runnable() { @Override public void run() { // Set up the projection (we only need the ID) String[] projection = { MediaStore.Images.Media._ID }; // Match on the file path String selection = MediaStore.Images.Media.DATA + " = ?"; String[] selectionArgs = new String[] { imageFile.getAbsolutePath() }; // Query for the ID of the media matching the file path Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; ContentResolver contentResolver = getActivity().getContentResolver(); Cursor c = contentResolver.query(queryUri, projection, selection, selectionArgs, null); if (c.moveToFirst()) { // We found the ID. Deleting the item via the content provider will also remove the file long id = c.getLong(c.getColumnIndexOrThrow(MediaStore.Images.Media._ID)); Uri deleteUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id); contentResolver.delete(deleteUri, null, null); } else { // File not found in media store DB } c.close(); } }, 5000);

Estoy en 4.4.2, tratando de eliminar un archivo (imagen) a través de uri. Aquí está mi código:

File file = new File(uri.getPath()); boolean deleted = file.delete(); if(!deleted){ boolean deleted2 = file.getCanonicalFile().delete(); if(!deleted2){ boolean deleted3 = getApplicationContext().deleteFile(file.getName()); } }

En este momento, ninguna de estas funciones de eliminación está borrando el archivo. También tengo esto en mi AndroidManifest.xml:

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


Veo que has encontrado tu respuesta, sin embargo, no funcionó para mí. Eliminar siguió devolviendo falso, así que intenté lo siguiente y funcionó (para cualquier otra persona para quien la respuesta elegida no funcionó):

System.out.println(new File(path).getAbsoluteFile().delete());

El sistema de salida puede ser ignorado obviamente, lo puse para conveniencia de confirmar la eliminación.


¿Por qué no pruebas esto con este código?

File fdelete = new File(uri.getPath()); if (fdelete.exists()) { if (fdelete.delete()) { System.out.println("file Deleted :" + uri.getPath()); } else { System.out.println("file not Deleted :" + uri.getPath()); } }

Creo que parte del problema es que nunca intentas eliminar el archivo, solo sigues creando una variable que tiene una llamada a un método.

Entonces en tu caso podrías intentarlo:

File file = new File(uri.getPath()); file.delete(); if(file.exists()){ file.getCanonicalFile().delete(); if(file.exists()){ getApplicationContext().deleteFile(file.getName()); } }

Sin embargo, creo que es un poco exagerado.

Agregó un comentario de que está utilizando un directorio externo en lugar de un uri. Entonces, en su lugar, debería agregar algo como:

String root = Environment.getExternalStorageDirectory().toString(); File file = new File(root + "/images/media/2918");

Luego intenta eliminar el archivo.


Probé este código en el emulador Nougat y funcionó:

En manifestar agregar:

<application... <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider> </application>

Cree una carpeta xml vacía en la carpeta res y pase en el provider_paths.xml:

<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="external_files" path="."/> </paths>

A continuación, inserte el siguiente fragmento en su código (por ejemplo, fragmento):

File photoLcl = new File(homeDirectory + "/" + fileNameLcl); Uri imageUriLcl = FileProvider.getUriForFile(getActivity(), getActivity().getApplicationContext().getPackageName() + ".provider", photoLcl); ContentResolver contentResolver = getActivity().getContentResolver(); contentResolver.delete(imageUriLcl, null, null);