FileNotFoundException (permission denied) lorsque l'on tente d'écrire le fichier de sdcard Android

Comme vous pouvez le remarquer sur le titre, j'ai un problème avec l'écriture de fichiers sur carte sd Android. J'ai vérifié cette question mais il ne m'a pas aidé. Je veux écrire le fichier, qui sera dans l'espace public sur la sdcard, de sorte que toute autre application pourrait le lire.

D'abord, je vérifie si la carte sd est montée:

Environment.getExternalStorageState();

Ensuite, je lance ce code:

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();
    }

J'ai:

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

<application>
...
</application>
</manifest>

dans mon AndroidManifest.xml.

D'erreur Exact est: est-ce

java.io.FileNotFoundException: /storage/1510-2908/Download/secondFile.txt: open failed: EACCES (Permission denied)

Je teste mon code sur émulateur (imitant Nexus5 API 23). Mon minimale requise version du SDK est de 19 (4.4 Kitkat).


Aussi, tout fonctionne bien avec l'écriture de fichiers dans un dossier privé sur sdcard avec le même code, alors je dirais ancien code devrait fonctionner:

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();
    }

Quelqu'un a une idée de ce que pourrait être le problème? Se pourrait-il que d'une certaine manière KitKat 4.4 juste ne pas autoriser l'écriture dans l'espace public dans sdcard plus ou?

Quelle est la valeur que vous avez obtenu à Log.d("NEWFILE", file.getAbsolutePath()); ?
stackoverflow.com/questions/23527767/...
Vous avez également besoin de demander WRITE_EXTERNAL_STORAGE autorisations au Moment de l'Exécution, Comme vous le tester "Nexus5 API 23".
je suppose que c'est à cause de la gestion des permissions dans android m. comme dans deepanker du lien décrit, vous devez ajouter une demande de l'autorisation, avant d'accéder à l'espace de stockage en android m.
Vérifier ceci et ceci pour plus de détails.

OriginalL'auteur Drag0 | 2016-02-09