Öffnen fehlgeschlagen: EACCES (Berechtigung verweigert)

Ich habe ein sehr seltsames Problem mit dem Speicherzugriff auf einigen Geräten. Die App funktioniert auf meinen Testgeräten (Nexus 4 & 7, Samsung GS5). Alle meine Geräte mit Android 4.4.2. Aber ich habe viele E-Mails von Benutzern erhalten, die sagten, dass die App nicht in den Speicher schreiben kann (weder in den internen Speicher noch auf die SD-Karte). Aus der Protokolldatei, die von Benutzerfeedback erhalten wurde, kann ich den folgenden Code als Problem erkennen:

try {
    if (fStream == null) {
    fStream = new FileOutputStream(filename, true);
}
    fStream.write(data, 0, bytes);
    return;
} catch (IOException ex) {
    ex.printStackTrace();
}

Es wird eine Ausnahme in der Zeile fStream = new FileOutputStream (Dateiname, true) ausgelöst. beim Erstellen von FileOutputStream.

Das Stack-Protokoll lautet:

W/System.err( 8147): Caused by: java.io.FileNotFoundException: /storage/emulated/0/my_folder/test_file_name.png: open failed: EACCES (Permission denied)
w/System.err( 8147):    at libcore.io.IoBridge.open(IoBridge.java:409)
W/System.err( 8147):    at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
W/System.err( 8147):    at java.io.FileOutputStream.<init>(FileOutputStream.java:128)
W/System.err( 8147):    at myapp.save(SourceFile:515)
W/System.err( 8147):    ... 8 more
W/System.err( 8147): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
W/System.err( 8147):    at libcore.io.Posix.open(Native Method)
W/System.err( 8147):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
W/System.err( 8147):    at libcore.io.IoBridge.open(IoBridge.java:393)
W/System.err( 8147):    ... 11 more

In der AndroidManifest.xml habe ich folgende Berechtigungen deklariert:

 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19"/>
    <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

Ich habe bestätigt, dass die Benutzer die korrekte private App auf der SD-Karte verwenden. Und was noch seltsamer ist, dass es auch nicht in den internen Speicher schreiben kann. Wie kann das passieren, wenn ich sowohl Lese- als auch Schreibrechte habe? Die Benutzer sagen, dass sie ihre Geräte zu diesem Zeitpunkt nicht an den PC anschließen.

Aktualisieren

Es hat sich herausgestellt, dass ich FileOutputStream zu häufig aufrufe und schließe, wodurch irgendwann die FileNotFoundException ausgelöst wird. Klingt eher nach einem Threading-Problem.

Antworten auf die Frage(13)

Ihre Antwort auf die Frage