Как запросить удаление файла в Android Q для несобственных файлов - PullRequest
1 голос
/ 07 июня 2019

В Android Q приложения, которые не являются файловым менеджером или галереей по умолчанию, могут только изменять и / или удалять файлы изображений, которыми они владеют, то есть, которые создано приложением.

Предоставление чтения / записиразрешения не позволяют изменять или удалять файлы, не принадлежащие приложению.

Это означает, что не только файлы, созданные другими приложениями, недоступны, но и , если приложениеудаляется и затем переустанавливается, а затем этот файл теряет право собственности на все общедоступные файлы, которые приложение ранее создавало .Таким образом, после переустановки он больше не может изменять или удалять их.

При желании изменить 1 файл изображения или удалить большую часть файлов с несколькими изображениями, которые ранее принадлежали приложению, но были потерянывладение из-за переустановки, то какова процедура для выполнения таких действий (удаление или изменение)?

Предпочтительным решением было бы не использовать средство выбора файлов SAF, в смысле избегать запроса кПользователь может выбрать и предоставить местоположение с помощью SAF.

И если единственным решением является использование средства выбора файлов SAF, то как можно вызвать прямой запрос на удаление набора известных определенных файлов без запроса доступа к дереву,Не нужно ли указывать пользователю просматривать, искать и делать это самому?

1 Ответ

0 голосов
/ 07 июня 2019

каков порядок выполнения таких действий (удаление или изменение)?

AFAIK, ваш единственный вариант - использовать SAF и получить права таким образом.

Предпочтительным решением было бы не использовать средство выбора файла SAF, в смысле избегать запроса пользователю выбрать и предоставить местоположение через SAF.

Это невозможно. Это был бы недостаток безопасности, если бы это было. Пожалуйста, поймите, что, хотя вы и думаете, что это ваши файлы, с точки зрения ОС, это всего лишь файлы на устройстве. Если бы приложения могли получить доступ к произвольным файлам произвольной модификации, это было бы шагом назад по сравнению с довольно небезопасным материалом, который у нас был ранее.

как можно вызвать прямую подсказку об удалении набора известных конкретных файлов

В SAF нет опции пользовательского интерфейса delete-document или delete-tree, хотя это неплохая идея.

нет необходимости указывать пользователю просматривать, искать и делать это самому?

Это вы можете обойти. Вы можете попробовать это:

Шаг # 1: Получите Uri для одной из MediaStore записей (например, используйте ContentUris и один из идентификаторов query() для вашего контента)

Шаг # 2: Используйте getDocumentUri(), чтобы преобразовать это MediaStore Uri в SAF Uri, указывающее на то же содержание

Шаг № 3: Поместите этот SAF Uri в качестве значения EXTRA_INITIAL_URI в ACTION_OPEN_DOCUMENT_TREE Intent и используйте его, чтобы попытаться предварительно заполнить древовидный список в каталоге вашего контента

Шаг # 4: Подтвердите, что Uri, который вы получаете от ACTION_OPEN_DOCUMENT_TREE, это то, что вы ожидаете (у него есть ваши файлы, оно соответствует EXTRA_INITIAL_URI или что-то в этом духе)

Теперь вы можете удалить файлы, используя DocumentFile.fromTreeUri(), чтобы получить DocumentFile для дерева, и оттуда перечислить файлы в дереве и удалить их.

Неясно, будет ли Uri, полученное на шаге 2, для EXTRA_INITIAL_URI на шаге 3, неясно, поскольку я еще не пробовал это сделать (хотя он находится в моем списке дел на начало следующей недели. ..).

...