Я использую Samsung A3, Android 5.0.2. Я использую эту настройку для компиляции приложений, т.е. цель Android 4.1 Jelly Bean (API 16).
Я точно знаю путь к внешней съемной карте microSD, это /mnt/extSdCard/
(см. также примечание №7 ниже).
Проблема: я замечаю, что
File myDir = new File("/mnt/extSdCard/test");
myDir.mkdirs();
не работает: каталог не создается.
Также:
File file = new File("/mnt/extSdCard/books/test.txt"); // the folder "books" already exists on the external microSD card, has been created from computer with USB connection
FileOutputStream fos = new FileOutputStream(file);
выдает эту ошибку:
java.io.FileNotFoundException: /mnt/extSdCard/books/test.txt: ошибка открытия: EACCES (отказано в доступе) в libcore.io.IoBridge.open(...
Как обеспечить доступ для чтения и записи к внешней съемной карте microSD?
Примечания:
Environment.getExternalStorageDirectory().toString()
дает/storage/emulated/0
, что является внутренней памятью моего телефона, т.е. не то, что я хочу.getExternalFilesDir(null)
дает/storage/emulated/0/Android/data/com.blahblah.appname/files/
т.е. не то, что я хочу. Обратите внимание, что я не могу использоватьgetExternalFilesDirs
с финальнымs
, потому что это недоступно в API16. Также разрешения во время выполнения недоступны в API16.У меня уже есть
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
, а такжеREAD_EXTERNAL_STORAGE
.Я прочитал много тем, таких как эта или этот, на самом деле, наверное, двадцать подобных вопросов, но наконец, это кажется очень сложным, и все, и наоборот, сказано. Это мое, я ищу решение, специфичное для этой ситуации.
Мне не нужны
ACTION_OPEN_DOCUMENT
иACTION_CREATE_DOCUMENT
, на самом деле мне не нужно решение с графическим интерфейсом.Некоторые мои приложения (Sync Resilio) могут успешно изменять
/mnt/extSdCard/music/
, создавать там новые файлы и т. д.Кстати,
ls -la /mnt/extSdCard/
даетdrwxrwx--x root sdcard_r 2017-10-15 01:21 Android drwxrwx--- root sdcard_r 2017-10-14 00:59 LOST.DIR drwxrwx--- root sdcard_r 2017-12-05 16:44 books drwxrwx--- root sdcard_r 2017-11-21 22:55 music
getExternalFilesDirs
во множественном числе (Dirs) недоступен. Также недоступно разрешение во время выполнения, см. примечание 2. Любая другая идея? - person Basj   schedule 11.12.2017DocumentFile
. Не существует общедоступного API для получения пути к съемной SD-карте (насколько я знаю). Это должно помочь: stackoverflow.com/a/35175460/1048340 Почему вы не можете использовать внутреннее хранилище вместо съемного SD карта? - person Jared Rummler   schedule 13.12.2017DocumentFile
работать с target=API16, а также с Android 5.0.2? - person Basj   schedule 13.12.2017<EXT_SD_CARD>/books/hello.txt
(а не<EXT_SD_CARD>/Android/data/...
), скомпилируемый с помощью API16 (Android 4.1) и работающий на нерутированном телефоне Android 5.0? - person Basj   schedule 18.12.2017