421 Stimmen

Exception 'open failed: EACCES (Berechtigung verweigert)' auf Android

Ich bekomme

öffnen fehlgeschlagen: EACCES (Permission denied)

auf der Linie OutputStream myOutput = new FileOutputStream(outFileName);

Ich habe die Wurzel überprüft und versucht android.permission.WRITE_EXTERNAL_STORAGE .

Wie kann ich dieses Problem beheben?

try {
    InputStream myInput;

    myInput = getAssets().open("XXX.db");

    // Path to the just created empty db
    String outFileName = "/data/data/XX/databases/"
            + "XXX.db";

    // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    // Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();
    buffer = null;
    outFileName = null;
}
catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

6voto

Hamlet Kraskian Punkte 568

Ich hatte das gleiche Problem und keiner der Vorschläge hat geholfen. Aber ich fand einen interessanten Grund dafür, auf einem physischen Gerät, Galaxy Tab .

Wenn der USB-Speicher aktiviert ist, haben die Lese- und Schreibberechtigungen für den externen Speicher keine Auswirkungen. Schalten Sie den USB-Speicher einfach aus, und mit den richtigen Berechtigungen ist das Problem gelöst.

5voto

Mahdi Mehrizi Punkte 210

Ich hatte den gleichen Fehler, als ich versucht habe, ein Bild in den Ordner DCIM/Kamera auf dem Galaxy S5 (Android 6.0.1) zu schreiben und ich habe herausgefunden, dass nur dieser Ordner eingeschränkt ist. Ich konnte einfach in DCIM/einen beliebigen Ordner schreiben, aber nicht in die Kamera. Dies sollte eine markenbasierte Einschränkung/Anpassung sein.

5voto

ovenror Punkte 512

Ich würde alles Folgende erwarten /data zum "internen Speicher" gehören. Sie sollten jedoch in der Lage sein, zu schreiben /sdcard .

5voto

Prabakaran Punkte 128

Ändern Sie eine Berechtigungseigenschaft in Ihrer /system/etc/permission/platform.xml
und Gruppe müssen wie unten angegeben werden.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
    <group android:gid="sdcard_rw" />
    <group android:gid="media_rw" />    
</uses-permission>

4voto

Jason Zhu Punkte 73

Vielleicht lautet die Antwort so:

auf den API >= 23 Geräten, wenn Sie eine App installieren (die App ist keine System-App), sollten Sie die Speichererlaubnis in "Einstellung - Anwendungen" überprüfen, dort gibt es eine Erlaubnisliste für jede App, Sie sollten sie überprüfen!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X