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 ответов


  1. все отлично работает с записью файлов в личную папку на sdcard

начиная с Android 4.4, эти разрешения не требуется, если вы чтение или запись только файлов, которые являются частными для вашего приложения. Дополнительные сведения см. В разделе сохранение файлов, которые являются App-private.

  1. FileNotFoundException (разрешение отказано) при попытке записать файл на sdcard в Android

поскольку вы пытаетесь написать файл в эмуляторе с API 23 (Marshmallow), вам нужно запросить WRITE_EXTERNAL_STORAGE разрешение во время выполнения также. Проверка этой и этой подробнее.