Не может удалять файл из внешнего хранилища в программном обеспечении Android

Я пытаюсь удалить файл, расположенный по пути

/storage/714D-160A/Xender/image/Screenshot_commando.png 

Что я сделал до сих пор:

  try{ String d_path = "/storage/714D-160A/Xender/image/Screenshot_commando.png"; File file = new File(d_path); file.delete(); }catch(Exception e){ e.printStackTrace(); } 

И файл все еще находится на своем месте (не удален :()

Также я дал разрешение в файле манифеста.

 <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" /> <uses-permission android:name="android.permission.STORAGE" /> 

Solutions Collecting From Web of "Не может удалять файл из внешнего хранилища в программном обеспечении Android"

Использование ContentResolver для удаления медиафайлов является неправильным и создает множество проблем для пользователя.
Вы не можете удалить файл на sd-card просто удалив его информацию из ContentResolver в версиях Android больше, чем Jelly Bean(4.3) .
Он работает только в версиях Android до KitKat(4.4) .
Вот почему команда Android предоставила DocumentProvider .

Почему contentResolver.delete(...) неверен?
1. Заполняет sd-card
Когда вы пытаетесь удалить медиафайл на sd-card с помощью ContentResolver на версиях Android больше 4,3, фактический мультимедийный файл останется нетронутым, потому что метод contentResolver.delete(...) удаляет только информацию (имя, дата, Путь …) на носителе, и в итоге у вас будут незарегистрированные медиафайлы на вашей sd-card которые ContentResolver больше не знает об их существовании, и поэтому вы не могли видеть их в своей галерее, и вы думаете, что они были Удаляются с помощью этого подхода, пока они все еще присутствуют, и заполняют sd-card каждый раз, когда пользователь пытается удалить медиафайл на sd-card .

2. Медиа-файлы (изображения, видео, gif …) вернутся в галерею
В нем много приложений, особенно галерейных и файловых менеджеров, которые найдут эти незарегистрированные медиафайлы и снова добавят их в ContentResolver как их нормальное поведение, когда пользователь принимает свои нежелательные медиафайлы, ушел. Конечно, ни один пользователь не хочет, чтобы его / ее предполагали, что удаленные изображения или видео появятся в середине демонстрации.

Итак, каков правильный подход для удаления медиафайлов на sd-card ?
Ну, на это уже был дан ответ с использованием DocumentProvider .

 public static boolean delete(final Context context, final File file) { final String where = MediaStore.MediaColumns.DATA + "=?"; final String[] selectionArgs = new String[] { file.getAbsolutePath() }; final ContentResolver contentResolver = context.getContentResolver(); final Uri filesUri = MediaStore.Files.getContentUri("external"); contentResolver.delete(filesUri, where, selectionArgs); if (file.exists()) { contentResolver.delete(filesUri, where, selectionArgs); } return !file.exists(); } 

Используйте Environment.getExternalStorageDirectory().getAbsolutePath() вместо жесткого пути хранения данных

 String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); File f = new File(baseDir + "/714D-160A/Xender/image/Screenshot_commando.png"); boolean d = f.delete();