Почему я не могу писать во внешнее дополнительное хранилище Android?

Мое приложение работает на Android 6.0.1. Он написан на Python/Kivy, что, надеюсь, не имеет значения.

Мои данные могут стать большими. Это не личное. Я хочу, чтобы у пользователя был доступ с ПК. Итак, я хочу сохранить его на внешней SD-карте моего тестового устройства.

Да, уточняю что хочу WRITE_EXTERNAL_STORAGEв моем манифесте (через файл buildozer.spec). Я подтверждаю, что это сработало, проверив приложение в диспетчере приложений на устройстве. У него правильные разрешения.

Да, я запрашиваю разрешения снова во время выполнения, сразу при запуске. (См. Связанные вопросы. Почему я не могу писать во внешнее хранилище Android? И Не могу писать во внешнее хранилище). Я подтверждаю, что это сработало, предоставив обратный вызов. Предоставляются разрешения на чтение и запись.

Затем мое приложение получает python-for-android secondary_external_storage_path(). Как ни странно, он возвращает None! Изучив исходный код, он сначала пытается опроситьandroid.os.Environmentперед использованием некоторых эвристик, основанных на переменных среды. Основываясь на моих расчетах, используяadb shell, он должен найти переменную окружения, SECONDARY_STORAGE который объявлен, но установлен в /storage/extSdCard- несуществующая локация! - поэтому он терпит неудачу и возвращает None.

Из-за этого я временно жестко кодирую адрес: /storage/3143-6351/ и создал под ним подкаталог.

Я поместил несколько файлов в этот каталог.

Вот результат ls одного из файлов. На мой неопытный взгляд разрешения кажутся разумными.

-rwxrwx--x root sdcard_rw 0 2020-07-07 16:13 heard.csv

Родительский каталог имеет аналогичные разрешения.

Мое приложение запускается, счастливо читает файлы в этом каталоге, но когда оно пытается написать:

PermissionError: [Errno 13] Permission denied: '/storage/3143-6351/{path ellided}/heard.csv'

Раньше это работало, когда я имел дело с первичным вторичным хранилищем (то есть не со скрытым хранилищем приложений, а с общим хранилищем непосредственно на телефоне (но сбивчиво его называли /sdcard).

Почему мне отказывают в разрешении на запись, а мне дают разрешение на чтение?

0 ответов

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