varios - que carpetas puedo eliminar de mi android
¿Cómo eliminar un archivo de la tarjeta SD? (14)
Estoy creando un archivo para enviar como archivo adjunto a un correo electrónico. Ahora quiero eliminar la imagen después de enviar el correo electrónico. ¿Hay alguna manera de eliminar el archivo?
He intentado myFile.delete();
pero no eliminó el archivo.
Estoy usando este código para Android, entonces el lenguaje de programación es Java usando las formas usuales de Android para acceder a la tarjeta SD. Estoy eliminando el archivo en el método onActivityResult
, cuando se devuelve un Intent
a la pantalla después de enviar un correo electrónico.
Cambiar para Android 4.4+
Las aplicaciones no pueden escribir (eliminar, modificar ...) en el almacenamiento externo , excepto en sus directorios específicos del paquete .
Como dice la documentación de Android:
"No se debe permitir que las aplicaciones escriban en dispositivos de almacenamiento externo secundarios, excepto en sus directorios específicos del paquete, según lo permitan los permisos sintetizados".
Sin embargo, existe una solución desagradable (ver el código a continuación) . Probado en Samsung Galaxy S4, pero esta solución no funciona en todos los dispositivos. Además , no contaría con que esta solución esté disponible en futuras versiones de Android.
Hay un excelente artículo que explica (4.4+) el cambio de permisos de almacenamiento externo .
Puede leer más sobre la solución alternativa aquí . El código fuente provisional es de este sitio .
public class MediaFileFunctions
{
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static boolean deleteViaContentProvider(Context context, String fullname)
{
Uri uri=getFileUri(context,fullname);
if (uri==null)
{
return false;
}
try
{
ContentResolver resolver=context.getContentResolver();
// change type to image, otherwise nothing will be deleted
ContentValues contentValues = new ContentValues();
int media_type = 1;
contentValues.put("media_type", media_type);
resolver.update(uri, contentValues, null, null);
return resolver.delete(uri, null, null) > 0;
}
catch (Throwable e)
{
return false;
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private static Uri getFileUri(Context context, String fullname)
{
// Note: check outside this class whether the OS version is >= 11
Uri uri = null;
Cursor cursor = null;
ContentResolver contentResolver = null;
try
{
contentResolver=context.getContentResolver();
if (contentResolver == null)
return null;
uri=MediaStore.Files.getContentUri("external");
String[] projection = new String[2];
projection[0] = "_id";
projection[1] = "_data";
String selection = "_data = ? "; // this avoids SQL injection
String[] selectionParams = new String[1];
selectionParams[0] = fullname;
String sortOrder = "_id";
cursor=contentResolver.query(uri, projection, selection, selectionParams, sortOrder);
if (cursor!=null)
{
try
{
if (cursor.getCount() > 0) // file present!
{
cursor.moveToFirst();
int dataColumn=cursor.getColumnIndex("_data");
String s = cursor.getString(dataColumn);
if (!s.equals(fullname))
return null;
int idColumn = cursor.getColumnIndex("_id");
long id = cursor.getLong(idColumn);
uri= MediaStore.Files.getContentUri("external",id);
}
else // file isn''t in the media database!
{
ContentValues contentValues=new ContentValues();
contentValues.put("_data",fullname);
uri = MediaStore.Files.getContentUri("external");
uri = contentResolver.insert(uri,contentValues);
}
}
catch (Throwable e)
{
uri = null;
}
finally
{
cursor.close();
}
}
}
catch (Throwable e)
{
uri=null;
}
return uri;
}
}
El contexto de Android tiene el siguiente método:
public abstract boolean deleteFile (String name)
Creo que esto hará lo que quieras con los permisos de aplicación correctos que se enumeran arriba.
Esto funcionó para mí.
String myFile = "/Name Folder/File.jpg";
String my_Path = Environment.getExternalStorageDirectory()+myFile;
File f = new File(my_Path);
Boolean deleted = f.delete();
Esto funciona para mí: (Eliminar imagen de la Galería)
File file = new File(photoPath);
file.delete();
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(photoPath))));
Lo siento: hay un error en mi código antes debido a la validación del sitio.
String myFile = "/Name Folder/File.jpg";
String myPath = Environment.getExternalStorageDirectory()+myFile;
File f = new File(myPath);
Boolean deleted = f.delete();
Creo que está claro ... Primero debes saber la ubicación de tu archivo. En segundo lugar, Environment.getExternalStorageDirectory()
es un método que obtiene su directorio de la aplicación. Por último, la clase Archivo que maneja su archivo ...
Prueba esto.
File file = new File(FilePath);
FileUtils.deleteDirectory(file);
de Apache Commons
Puede eliminar un archivo de la siguiente manera:
File file = new File("your sdcard path is here which you want to delete");
file.delete();
if (file.exists()){
file.getCanonicalFile().delete();
if (file.exists()){
deleteFile(file.getName());
}
}
Recursivamente eliminar todos los hijos del archivo ...
public static void DeleteRecursive(File fileOrDirectory)
{
if (fileOrDirectory.isDirectory())
{
for (File child : fileOrDirectory.listFiles())
{
DeleteRecursive(child);
}
}
fileOrDirectory.delete();
}
También debes dar permiso si estás usando> 1.6 SDK
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
en el archivo AndroidManifest.xml
Tuve un problema similar con una aplicación que se ejecuta en 4.4. Lo que hice fue una especie de truco.
Cambié el nombre de los archivos y los ignoré en mi aplicación.
es decir.
File sdcard = Environment.getExternalStorageDirectory();
File from = new File(sdcard,"/ecatAgent/"+fileV);
File to = new File(sdcard,"/ecatAgent/"+"Delete");
from.renameTo(to);
public static boolean deleteDirectory(File path) {
// TODO Auto-generated method stub
if( path.exists() ) {
File[] files = path.listFiles();
for(int i=0; i<files.length; i++) {
if(files[i].isDirectory()) {
deleteDirectory(files[i]);
}
else {
files[i].delete();
}
}
}
return(path.delete());
}
Este código te ayudará ... Y en el manifiesto de Android Debes obtener permiso para realizar modificaciones.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
File file = new File(selectedFilePath);
boolean deleted = file.delete();
donde selectedFilePath es la ruta del archivo que desea eliminar, por ejemplo:
/sdcard/YourCustomDirectory/ExampleFile.mp3
File filedel = new File("/storage/sdcard0/Baahubali.mp3");
boolean deleted1 = filedel.delete();
O bien, intente esto:
String del="/storage/sdcard0/Baahubali.mp3";
File filedel2 = new File(del);
boolean deleted1 = filedel2.delete();
private boolean deleteFromExternalStorage(File file) {
String fileName = "/Music/";
String myPath= Environment.getExternalStorageDirectory().getAbsolutePath() + fileName;
file = new File(myPath);
System.out.println("fullPath - " + myPath);
if (file.exists() && file.canRead()) {
System.out.println(" Test - ");
file.delete();
return false; // File exists
}
System.out.println(" Test2 - ");
return true; // File not exists
}