Intereting Posts
Как создать пользовательский TextView? Как сделать пользовательские кнопки формы, которые перекрывают друг друга в Android Программно фиксировать в портретном режиме для определенных операций GPGS надежные сообщения, не доходящие до другого игрока Как использовать приложение Google GDK для погружения Google Glass только с помощью Voice Command? Поддерживает ли Android всегда новейший API для запуска приложения? Пользовательский массив ArrayAdapter в ListFragment Интеллектуальные поисковые контакты в android Как сохранить добавленные накладки Google Maps в приложении для Android? Аннотации Атрибут не принимает мою переменную Как обновить Android ListView динамическими данными в реальном времени? Как вставить в sqlite в android Устройства Google Glass ADB не найдены. Драйвер OMAP4430 не установлен (не может найти его!) Как установить режим фотосферы при открытой панораме Android «Netcfg wlan0 up» Не работает из приложения

Удаление файла Android оставляет пустое место в галерее

Я вставляю изображение через:

ContentValues values = new ContentValues(); values.put(Images.Media.TITLE, filename); values.put(Images.Media.DATE_ADDED, System.currentTimeMillis()); values.put(Images.Media.MIME_TYPE, "image/jpeg"); Uri uri = this.getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values); 

Но когда я пытаюсь удалить

  File f = new File(imageURI); f.delete(); 

Изображение больше не существует, но пустой заполнитель. Есть идеи?

Solutions Collecting From Web of "Удаление файла Android оставляет пустое место в галерее"

У Android есть кеш, который отслеживает медиафайлы.

Попробуй это:

 sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 

Это заставляет службу MediaScanner запускаться снова, что должно удалить удаленное изображение из кеша устройства.

Похоже, вам также нужно добавить это разрешение на свой AndroidManifest.xml:

 <intent-filter> <action android:name="android.intent.action.MEDIA_MOUNTED" /> <data android:scheme="file" /> </intent-filter> 

Как указано в комментариях, принятый ответ использует много памяти. В то время как MediaScannerConnection не имеет метода «deleteFile», просто передайте старый путь к методу «scanFile» после удаления файла. Сканер для мультимедиа сканирует и удаляет носитель.

Протестирован на N5. Android 4.4.

EDIT: Другие заявили, что это не работает на 4.2

 new AsyncTask<Void, Void, Void>(){ @Override protected Void doInBackground(Void... params) { String filePath = recording.file.getAbsolutePath(); recording.file.delete(); MediaScannerConnection.scanFile(context, new String[]{filePath}, null, null); return null; } }.execute(); 

Вы также можете удалить изображение из галереи, используя:

GetContentResolver (). Delete (imageUri, null, null);

Просто убедитесь, что «imageUri» – это uri, возвращенный вам, когда вы вызываете вставку.

Если вы не знаете идентификатор изображения, как требуется в ответе @manisha и @Muhammad Waqas Khan, вы также можете удалить по имени файла

  String fullPathToFile = "/storage/sdcard0/DICM/test.jpg"; getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media.DATA + "=?", new String[]{ fullPathToFile } ); 

[Обновление 2016-06-16]

Опасность: это выглядит как «Удалить объект только из mediaDB». Поскольку в mediaDB есть SQLite-каскадный файл-delete-trigger, ссылочный файл также удаляется, если он существует.

Чтобы этого избежать, вы должны изменить столбец MediaStore.Images.Media.DATA на несуществующий путь к файлу перед вызовом delete.

Взято из: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.html

Это сработало для меня (протестировано на HTC Desire, Android 2.3)

 // Tell the media scanner about the new file so that it is // immediately available to the user. MediaScannerConnection.scanFile(this,new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); 

Используйте этот метод getContentResolver (). Delete (MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
MediaStore.Images.Media._ID + "=?", Новый String [] {Long.toString (id)});

Добавьте эту строку после File.delete(); :

 MediaScannerConnection.ScanFile(this,new string[]{fileUrl.ToString()}, null, null);