FileNotFoundException (разрешение отказано) при попытке записи файла на sdcard в Android
как вы можете заметить из названия, у меня проблема с записью файла на карту памяти в Android. Я проверил этот вопрос но мне это не помогло. Я хочу написать файл, который будет находиться в открытом пространстве на sdcard, чтобы любое другое приложение могло его прочитать.
во-первых, я проверяю, установлена ли sdcard:
Environment.getExternalStorageState();
затем я запускаю этот код:
File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
baseDir.mkdirs();
File file = new File(baseDir, "file.txt");
try {
FileOutputStream out = new FileOutputStream(file);
out.flush();
out.close();
Log.d("NEWFILE", file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
Я:
<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
...
</application>
</manifest>
в моем AndroidManifest.XML.
точная ошибка это:
java.io.FileNotFoundException: /storage/1510-2908/Download/secondFile.txt: open failed: EACCES (Permission denied)
я тестирую свой код на эмуляторе (эмуляция Nexus5 API 23). Моя минимальная требуемая версия SDK-19 (4.4 Kitkat).
кроме того, все отлично работает с записью файлов в личную папку на sdcard с тем же кодом, поэтому я бы сказал, что бывший код тоже должен работать:
File newFile = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "esrxdtcfvzguhbjnk.txt");
newFile.getParentFile().mkdirs();
try {
FileOutputStream out = new FileOutputStream(newFile);
out.flush();
out.close();
Log.d("NEWFILE", newFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
кто-нибудь знает, в чем может быть проблема? Может быть, как-то KitKat 4.4 просто не позволяет писать в общественное пространство на sdcard больше или?
1 ответов
- все отлично работает с записью файлов в личную папку на sdcard
начиная с Android 4.4, эти разрешения не требуется, если вы чтение или запись только файлов, которые являются частными для вашего приложения. Дополнительные сведения см. В разделе сохранение файлов, которые являются App-private.
- FileNotFoundException (разрешение отказано) при попытке записать файл на sdcard в Android
поскольку вы пытаетесь написать файл в эмуляторе с API 23 (Marshmallow), вам нужно запросить WRITE_EXTERNAL_STORAGE
разрешение во время выполнения также. Проверка этой и этой подробнее.