Не могу записать на SD-карту на Android - PullRequest
0 голосов
/ 20 сентября 2018

У меня проблема с записью на SD-карту на моем устройстве Android 4.4.Я пишу приложение, которое получает путь к своему каталогу на SD-карте с помощью метода getExternalFilesDirs ().Но когда я пытаюсь сохранить данные в каталоге, я получаю сообщение об ошибке:

EACCES (Permisson denied)

Каталоги приложений в Android / data / во внутренней памяти и на SD-карте принадлежат разным пользователям Linux.Любое другое приложение на моем устройстве работает нормально.Приложение работает на другом устройстве с этой SD-картой.

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

я думаю, что вы ошиблись этой строкой.Дважды проверьте эту строку

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

где вы поместили эту строку?

эта строка должна быть за пределами <application/> scope

как это

<manifest>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        ...
        <application>
            ...
            <activity> 
                ...
            </activity>
        </application>
    </manifest>

Чтобы getExternalFilesDirs возвращал путь SD-карты, OEM-производитель должен установить переменную среды SECONDARY_STORAGE в файле init.rc для конкретного устройства, как упомянуто здесь: https://source.android.com/devices/storage/config-example.html

Посмотрите на источник getExternalFilesDirs здесь: http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/app/ContextImpl.java#1039

Значение получено из Environment.buildExternalStorageAppFilesDirs.Посмотрите на этот источник здесь: http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/Environment.java#206

Значение зависит от mExternalDirsForApp, который, в свою очередь, заполняется чтением содержимого переменной SECONDARY_STORAGE: http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/Environment.java#136

Как вы можете видеть, еслипеременная SECONDARY_STORAGE не установлена, путь SDCard не будет возвращен.Вы можете проверить это, перейдя в adb shell и посмотрев вывод echo $ SECONDARY_STORAGE

0 голосов
/ 20 сентября 2018

use getExternalFilesDir ()

Возвращает путь к папке с файлами внутри Android / data / data / your_package / на SD-карте вторичного хранилища.Он используется для хранения любых необходимых файлов для вашего приложения (например, изображений, загруженных из Интернета или файлов кэша).Как только приложение будет удалено, все данные, хранящиеся в этой папке, тоже исчезнут.

Здесь вы можете записать файл во вторичное хранилище, т.е. (ваша микро-SDCard)

, если вы хотите писать внеили корень вторичного хранилища, которое вы должны использовать Структура доступа к хранилищу .

0 голосов
/ 20 сентября 2018

Вам необходимо добавить это разрешение в AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...