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?
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
Vous devez vous connecter pour publier un commentaire.
Début avec Android 4.4, ces autorisations ne sont pas nécessaire si vous êtes
en lecture ou en écriture uniquement les fichiers qui sont privés de votre application. Pour plus d'informations, voir enregistrer des fichiers qui sont app-privé.
Que vous êtes en train d'écrire le fichier dans l'émulateur ayant API 23(Guimauve), Vous devez Demander
WRITE_EXTERNAL_STORAGE
autorisation au moment de l'exécution. Vérifier cette et cette pour plus de détails.Permission est accordée de votre application dans le même temps, permettre à l'utilisateur l'autorisation.
Jetez un oeil à Can pas écrire de stockage externe, à moins que l'app est redémarré après l'octroi de l'autorisation et Android 6.0 besoin de redémarrer après l'octroi de l'autorisation de l'utilisateur à l'exécution DONC post. Ils ont signalé le même problème comme le vôtre.
Merci, il semble qu'il y ait un problème avec Android en ce moment, et le bug est signalé ici: code.google.com/p/android-developer-preview/issues/...
OriginalL'auteur Dhaval Patel