FileNotFoundException (Zugriff verweigert), wenn Sie versuchen zu schreiben, Datei auf SD-Karte in Android
Wie Sie sehen können aus dem Titel, ich habe ein problem mit dem schreiben der Datei auf SD-Karte in Android. Ich habe diese Frage, aber es hat mir nicht helfen. Ich möchte schreiben Datei, die im öffentlichen Raum auf sdcard, so dass jede andere app könnte es Lesen.
Als erstes prüfe ich, ob sdcard gemountet ist:
Environment.getExternalStorageState();
Habe ich dann diesen code ausführen:
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();
}
Habe ich:
<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
...
</application>
</manifest>
in meinem AndroidManifest.xml.
Genaue Fehler ist:
java.io.FileNotFoundException: /storage/1510-2908/Download/secondFile.txt: open failed: EACCES (Permission denied)
Ich Teste meinen code auf dem emulator (emuliert dem nexus5 API-23). Mein minimum required SDK version 19 (4.4 Kitkat).
Auch, klappt alles mit dem schreiben von Dateien in den privaten Ordner auf sdcard mit dem gleichen code, so würde ich sagen ehemaligen-code sollte auch funktionieren:
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();
}
Hat jemand eine Ahnung was das problem sein könnte? Könnte es sein, dass irgendwie KitKat 4.4 einfach nicht schreiben, um den öffentlichen Raum in sdcard mehr oder?
- Was ist der Wert, den Sie bei
Log.d("NEWFILE", file.getAbsolutePath());
? - stackoverflow.com/questions/23527767/...
- Sie müssen auch auf Anfrage
WRITE_EXTERNAL_STORAGE
Berechtigungen zur Laufzeit, Wie Sie testen es "dem nexus5 API-23". - ich denke, es ist wegen der Erlaubnis Handhabung in android m. wie in deepanker link beschrieben, dann müssen Sie einen Antrag für die Erlaubnis vor dem Zugriff auf den Speicher in android m.
- Check dieser und dieser für weitere Details.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beginnend mit Android 4.4, diese Berechtigungen sind nicht erforderlich, wenn Sie
Lesen oder schreiben nur die Dateien, die privat für Ihre app. Weitere Informationen finden Sie unter speichern von Dateien, app-private.
Als Sie versuchen, eine Datei zu schreiben, die in emulator mit API-23(Marshmallow), müssen Sie die Anfrage
WRITE_EXTERNAL_STORAGE
Erlaubnis zur Laufzeit auch. Überprüfen Sie diese und diese für mehr detail.