Открыть не удалось: EACCES (В доступе отказано)? - PullRequest
0 голосов
/ 14 октября 2018
new File(System.getenv("SECONDARY_STORAGE") + "/foo/", "bar.txt").createNewFile()

Эта строка кода должна была создать файл в каталоге foo на SD-карте (SD-карта смонтирована).Однако System.getenv("SECONDARY_STORAGE") возвращает "/storage/sdcard1".Это должно работать нормально, только то, что первый подобный код, который должен создать файл, выдает

android.system.ErrnoException: open failed: EACCES (Permission denied)

примечание: подкласс IOException

Чтение с использованием System.getenv("SECONDARY_STORAGE") работает нормально, однаковсе средства записи потерпят неудачу с одним и тем же исключением.

Этого легко избежать, используя "/sdcard/", но этот метод ненадежен, поскольку не все производители помещают ярлык sdcard в корневой каталог.

Есть ли способ обойти это надежно?

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Эта строка кода должна была создать файл в каталоге foo на SD-карте (SD-карта смонтирована).

Не на каком-либо устройстве, произведенном за последние четыре года или около того.Раньше он также не работал надежно, так как нет необходимости в существовании такой переменной среды, указывающей на любое место, которое вы можете использовать.

Работает чтение с использованием System.getenv ("SECONDARY_STORAGE")штраф

Если под «чтением» вы подразумеваете «чтение из местоположения файловой системы, на которое указывает эта недокументированная неподдерживаемая переменная среды», то это работает только на неисправных устройствах, которые публикуют полуполезное значениев этой недокументированной, неподдерживаемой переменной среды.

Этого легко избежать, используя "/ sdcard /", но этот метод ненадежен, поскольку не все производители помещают ярлык sdcard в корень.

Он также не делаетуказать на SD-карту.

Есть ли способ обойти это надежно?

У вас нет возможности записи в произвольные места на съемном носителе .

Простейшие места для записи на съемном носителе находятся в местах, предоставленных методами getExternalFilesDirs(), getExternalCacheDirs() и getExternalMediaDirs() для Context.Если они возвращают 2+ местоположения, второе и последующие находятся на съемном носителе, и у вас есть полный доступ для чтения / записи к ним.

0 голосов
/ 14 октября 2018

У меня была такая же проблема. Разрешение на использование было не в том месте.Это правильно:

 <manifest>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        ...
        <application>
            ...
            <activity> 
                ...
            </activity>
        </application>
    </manifest> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...