Не могу записать на SD-карту на Android
У меня проблема с записью на SD-карту на моем устройстве Android 4.4. Я пишу приложение, которое получает путь к своему каталогу на SD-карте с помощью метода getExternalFilesDirs(). Но когда я пытаюсь сохранить данные в каталоге, я получаю сообщение об ошибке:
EACCES (Permisson denied)
Каталоги приложений в Android/data/ во внутренней памяти и на SD-карте принадлежат разным пользователям Linux. Любое другое приложение на моем устройстве работает нормально. Приложение работает на другом устройстве с этой SD-картой.
3 ответа
Использовать getExternalFilesDir()
Он возвращает путь к папке с файлами внутри Android/data/data/your_package/ на вторичной карте памяти SD. Он используется для хранения любых необходимых файлов для вашего приложения (например, изображений, загруженных из Интернета или файлов кэша). После удаления приложения все данные, хранящиеся в этой папке, также исчезают.
Здесь вы можете записать файл во вторичное хранилище, т. Е. (Ваш микро SDCard)
если вы хотите писать вне или в корень вторичного хранилища, вы должны использовать среду доступа к хранилищу.
Вам необходимо добавить это разрешение в AndroidManifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Я думаю, что вы ошиблись этой линией. Дважды проверьте эту строку
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
где вы положили эту строку?
эта линия должна быть за пределами <application/>
объем
как это
<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 и посмотрев вывод echo $SECONDARY_STORAGE