Android 10: Как программно удалить элемент MediaStore и связанные с ним данные в файловой системе?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android 10: Как программно удалить элемент MediaStore и связанные с ним данные в файловой системе?

Сообщение Anonymous »

Я обновляю свое приложение, чтобы использовать функцию Scoped Storage, представленную в Android 10.

Мое приложение работает с MediaStore и отображает изображения, видео и аудиофайлы, а также предоставляет возможность пользователь должен удалить элемент.

Что я сделал ранее, чтобы удалить файл:
  • Получил путь от MediaStore.MediaColumns.DATA
  • Использовал новый 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 Фото — он сканирует файловую систему)< /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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»