Я не могу записать файл во внешнее хранилище (например, /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
Спасибо!
Вы больше не можете создавать файлы или каталоги в корне внешнего хранилища.
Используйте один из общедоступных каталогов, таких как Documents, Download, DCIM, Pictures, ...