Я обновляю свое приложение для использования функции Scoped Storage, представленной в Android 10.
Мое приложение работает с MediaStore и отображает изображения, видео и аудиофайлы, а также предоставляет пользователю возможность удалить элемент.
Что я делал ранее для удаления файла:
- Получил путь из
MediaStore.MediaColumns.DATA
- Использовал
new File(path).delete()
для удаления этого файла - Обновление MediaStore вручную
Теперь, когда MediaStore.MediaColumns.DATA недоступен, я перенес удаление элементов из MediaStore с помощью ContentResolver.delete ()
Например, у меня есть 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 Photos - сканируется файловая система)
Например: Android 10 в моих Google Pixel и Google Pixel 3a XL работает как описано выше для изображений / видео / аудио, но Android 9 на Xiaomi Mi A2 Lite ведет себя так же только с аудио-файлами, в то время как удаление изображений / видео в порядке.
У меня android:requestLegacyExternalStorage="false"
в манифесте.
Есть ли способ заставить MediaStore также удалить данные в файловой системе? Почему файл в файловой системе остался позади?