Android: удалите изображение с SD-карты
Мне нужно удалить изображение с SD-карты, выбранной пользователем.
В моей деятельности после выбора пользователем изображения из галереи я выполняю этот код:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Utils.imgUri = data.getData();
Utils.imgPath = getPath(Utils.imgUri);
File file = new File(Utils.imgPath);
boolean deleted = file.delete();
}
}
}
где метод getPath:
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
if(cursor!=null){
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
else return null;
}
Изображения правильно удалены, но в галерее все еще остается предварительный просмотр удаляемого изображения.
Когда я нажимаю на него, загружается черное изображение.
Итак, как обновить предварительные просмотры галереи после удаления некоторых изображений из кода приложения?
Ответы
Ответ 1
Разрешено добавление:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Это снова запустит службу MediaScanner, которая должна удалить удаленное изображение из кэша устройства.
та же проблема здесь
Ответ 2
Зачем вам это делать?
Вы можете сделать это так просто:
getContentResolver().delete(Utils.imgUri, null, null);
Ответ 3
Установили ли вы разрешение <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
в файле манифеста?
Ответ 4
Вы уверены, что путь к файлу верен? Поскольку способ фактического удаления должен быть в порядке, см. Этот поток SO:
Как удалить файл с SD-карты?
Должен ли/mnt/действительно быть там? Кроме того, есть ли у вас разрешения на удаление файлов из хранилища? (Android.permission.WRITE_EXTERNAL_STORAGE)
Ответ 5
в параметре "данные" у вас тоже есть Uri, просто "data.getUri()
". Кроме того, вы тестируете на реальных устройствах? если это так, и если это samsung, это не работает (см. этот поток).
Ответ 6
простая одна строка;)
new File(uri.getPath()).delete();
и в манифесте должны использовать эти разрешения
android.permission.WRITE_EXTERNAL_STORAGE
Ответ 7
добавить код ниже в onDestroy
<сильные > если (myFile.exists()) myFile.delete();
и не забудьте добавить разрешение в файл Манифест
android.permission.WRITE_EXTERNAL_STORAGE