каков порядок выполнения таких действий (удаление или изменение)?
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, неясно, поскольку я еще не пробовал это сделать (хотя он находится в моем списке дел на начало следующей недели. ..).