Flutter Android - Запись файлов на внешнее хранилище

Я не могу записать файл во внешнее хранилище (например, /storage/emulated/0/Example).

Моя текущая конфигурация выглядит следующим образом:

  • targetSdk: 33
  • WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE added
  • "storage" permission request at runtime (Permission.storage.request())

С этой конфигурацией я всегда получаю "permanently denied" при проверке разрешения на хранение во время выполнения. Поэтому я добавил в AndroidManifest следующее:

  • android:requestLegacyExternalStorage = "true"

С этим изменением я получаю окно запроса разрешения во время выполнения, и я могу подтвердить, что мое приложение может использовать это разрешение.

Теперь проверка разрешений возвращает "granted", но если я попытаюсь записать файл, например. /storage/emulated/0/Example/test.txt Я получаю сообщение об ошибке:

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: FileSystemException: Cannot open file, path = '/storage/emulated/0/Example/test.txt' (OS Error: Operation not permitted, errno = 1)

Затем я попробовал это с разрешениями Granular Media для Android 13:

  • READ_MEDIA_IMAGES, READ_MEDIA_AUDIO, READ_MEDIA_VIDEO

Это также не сработало для меня.

Единственный способ, которым я заработал, — определить разрешение MANAGE_EXTERNAL_STORAGE. Но если я загружаю свой пакет приложений, Google отклоняет его из-за этого разрешения.

Какие еще варианты у меня есть для этих требований:

  • Flutter
  • targetSdk > 33
  • allow user to save files to any folder he wants
  • do not use MANAGE_EXTERNAL_STORAGE

Спасибо!

0
0
136
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы больше не можете создавать файлы или каталоги в корне внешнего хранилища.

Используйте один из общедоступных каталогов, таких как Documents, Download, DCIM, Pictures, ...

Другие вопросы по теме