Я работаю над приложением для управления файлами, охватывающим API-интерфейсы с 24 по 36 (на момент написания).
Я использую FileProvider, чтобы позволить любому способному приложению открывать файлы любого типа в системе, по большей части.
Вплоть до API 30, Я могу запросить доступ к SD-картам и другим съемным носителям с помощью Storage Access Framework. Однако более новые API не позволяют пользователю выбирать такие корни (см. изображение ниже).

Теперь, с новым разрешением MANAGE_EXTERNAL_STORAGE, я все еще могу иметь доступ к своему приложению, читать и записывать все это пути. Однако, когда я хочу разрешить другому приложению открыть файл, скажем, изображение, я полагаюсь на FileProvider, чтобы справиться с этим:
Код: Выделить всё
MyFileProvider.getUriForFile(context, "com.example.provider", file);
Код: Выделить всё
Это не совсем так, и я нашел один обходной путь — использовать тег в file_paths.xml, который, как очевидно, не разрешен, согласно этому сообщению, безопасность и все такое. это.

Я не могу найти никакой полезной документации по этому тегу, кроме небольшой заметки о том, что он небезопасен. Почему это вообще разрешено? Какова его цель в рабочей среде?
К сожалению, это единственный способ, с помощью которого мне удалось последовательно позволить пользователю выполнять большинство действий с большинством установленных приложений с большинством файлов.
Конечно, если я попытаюсь поделиться без FileProvider, это не сработает из-за утечки Uri в намерении.
Я обнаружил, что другие приложения для управления файлами делают это без проблем, просто предоставив разрешение Разрешение MANAGE_EXTERNAL_STORAGE, которое я не совсем понял.
Я могу себе представить, что они выполняют необычные преобразования между API между своим хранилищем кэша и «фактическим» хранилищем, но это было бы невероятно дорого при работе с большими/несколькими файлами одновременно.
Я хотел бы знать, чего мне здесь не хватает и как мне с этим справиться.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... other-apps
Мобильная версия