Как мне безопасно поделиться своим Uri с SD-карты с другими приложениями?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как мне безопасно поделиться своим Uri с SD-карты с другими приложениями?

Сообщение Anonymous »

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

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

Код: Выделить всё

MyFileProvider.getUriForFile(context, "com.example.provider", file);
Использование Проблема здесь в том, что FileProvider, судя по тому, что я читал, может обслуживать только файлы из несъемного хранилища (официально).

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

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

Подробнее здесь: https://stackoverflow.com/questions/797 ... other-apps
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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