В Android Q поле MediaStore.Files.FileColumns.DATA устарело , и может иметь значение Null или приложения не имеют прав на Прочитайте его при нацеливании на такую версию ОС, поэтому предпочтительнее работать с использованием только Uri содержимого файла.
Поскольку MediaScannerConnection принимает только пути к файлам, я обнаружил, что для Android Q это больше не вариант.
Каким будет способ принудительного автоматического MediaStore обновления / повторного сканирования одного файла, не зная его реального пути и , используя только его Uri ? Намерение не в том, чтобы даже попытаться найти реальный путь и полагаться только на Ури.
Учтите, что Uri для принудительного обновления является мультимедийным контентом Uri (не SAF Uri ).
Пример: content: // media / external / images / media / 123
Решение не должно заключаться в повторном сканировании всего хранилища или его повторном монтировании / подключении, поскольку это приведет к снижению производительности в нашем рабочем процессе и сделает его полностью непригодным для использования.
А поскольку целью является использование только Uri, то следует избегать принудительного сканирования любого конкретного каталога файлов, что также может оказать влияние, если в нем содержится много файлов, и подразумевает, что должен быть разрешен реальный путь к каталогу. от Ури, что не вариант.
UPDATE:
Мы попробовали с неудачными результатами метод ContentResolver.refresh , представленный в Android O, но этот метод вообще не выполняет никакого обновления, когда дело доходит до медиа-контента. в таком формате, как: content: // media / external / images / media / 123
final ContentResolver resolver = context.getContentResolver();
resolver.refresh(uri, null, null);