Мое приложение работает с MediaStore и отображает изображения, видео и аудиофайлы, а также предоставляет возможность пользователь должен удалить элемент.
Что я сделал ранее, чтобы удалить файл:
- Получил путь от MediaStore.MediaColumns.DATA
- Использовал новый File(path).delete() для удаления этого файла
- Обновление MediaStore вручную
Например У меня есть uri элемента: content://media/external/images/media/502 (его действительный uri, я показываю его миниатюру в сетке). Не имеет значения, вставил ли я этот элемент в MediaStore или какое-то другое приложение.
Я использую context.getContentResolver().delete(uri, null, null). Ему либо удается удалить (возвращает 1 строку), либо перехватить RecoverableSecurityException, чтобы использовать startIntentSenderForResult(), чтобы получить доступ к текущему URI, а затем использовать тот же getContentResolver().delete() для удаления его в onActivityResult() и затем успешное удаление.
В любом случае этот элемент будет удален из MediaStore и не отображается в результатах ни при запросе изображений в MediaStore, ни в других приложениях.
НО этот файл существует в файловой системе (проверено с помощью SAF и различных файловых менеджеров (Google Files, Total Commander))
Иногда (в зависимости от версии Android и типа носителя) эти объекты возвращаются обратно в MediaStore после перезагрузки телефона (или после открытия Google Фото — он сканирует файловую систему)< /p>
Например: Android 10 на моем Google Pixel и Google Pixel 3a XL ведет себя, как описано выше, для изображений/видео/аудио, но Android 9 на Xiaomi Mi A2 Lite ведет себя так только с аудиофайлами, при этом изображения/видео удаляются нормально.
У меня есть android:requestLegacyExternalStorage="false" в манифесте.
Есть ли способ заставить MediaStore удалить данные в файловой системе тоже? Почему файл в файловой системе остается позади?
Подробнее здесь: https://stackoverflow.com/questions/607 ... file-syste