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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как получить данные из MediaStore.File и MediaStore.File.FileColumn
    Anonymous » » в форуме Android
    0 Ответы
    78 Просмотры
    Последнее сообщение Anonymous
  • Как работает PkgPredictions.db в файловой системе Android?
    Anonymous » » в форуме Android
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous
  • Как избежать броски httpmessageConversionException, связанные с классами, связанные с весной
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как избежать броски httpmessageConversionException, связанные с классами, связанные с весной
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как избежать броски httpmessageConversionException, связанные с классами, связанные с весной
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

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