Ausnahme 'Öffnen fehlgeschlagen: EACCES (Berechtigung verweigert)' auf Android
Ich bin immer
open failed:
EACCES (Permission denied)
auf der Linie OutputStream myOutput = new FileOutputStream(outFileName);
Ich habe in der root, und ich habe 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();
}
InformationsquelleAutor der Frage Mert | 2012-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem... Die
<uses-permission
war an der falschen Stelle. Das ist richtig:Den
uses-permission
tag muss außerhalb derapplication
tag.InformationsquelleAutor der Antwort user462990
Für API-23+ Sie fordern die lese - /schreib-Berechtigungen, auch wenn Sie bereits in Ihrem manifest.
AndroidManifest.xml
Sich für eine offizielle Dokumentation über das anfordern von Berechtigungen für die API-23+, überprüfen Sie https://developer.android.com/training/permissions/requesting.html
InformationsquelleAutor der Antwort Justin Fiedler
Habe ich beobachtet, dass diese einmal beim ausführen der Anwendung im emulator. In den emulator-Einstellungen, müssen Sie die Größe der externen Speicher ("SD-Karte") richtig. Standardmäßig werden die "externen Speicher" - Feld leer ist, und das bedeutet wahrscheinlich, dass dort ist kein solches Gerät und EACCES geworfen wird, selbst wenn die Berechtigungen in der manifest.
InformationsquelleAutor der Antwort h22
Zusätzlich zu all den Antworten, stellen Sie sicher, dass Sie nicht mit Ihrem Telefon als USB-Speicher.
Ich hatte das gleiche problem auf dem HTC Sensation auf USB-Speicher-Modus aktiviert. Ich kann noch Debuggen/ausführen der app, aber ich kann nicht speichern auf externe Speichermedien.
InformationsquelleAutor der Antwort john
Meine Frage wurde mit "TargetApi(23)" die ist erforderlich, wenn Sie die minSdkVersion ist Balg 23.
So, ich habe die Erlaubnis bitten, mit dem folgenden snippet
InformationsquelleAutor der Antwort Piroxiljin
Es stellte sich heraus, es war ein blöder Fehler, da hatte ich mein Handy trotzdem mit dem desktop-PC und wusste nicht, dies.
Also musste ich deaktivieren Sie die USB-Verbindung und alles hat gut funktioniert.
InformationsquelleAutor der Antwort Tobias Reich
Ich hatte das gleiche problem auf dem Samsung Galaxy Note 3, läuft CM 12.1. Das Problem für mich war, dass ich
hatte und verwenden Sie es auf nehmen und speichern der Benutzer-Fotos. Als ich versuchte, laden Sie die gleichen Fotos in ImageLoader ich habe die
(Permission denied)
Fehler. Die Lösung war explizit hinzufügenda die oben genannten Erlaubnis nur beschränkt die Berechtigung schreiben, die bis zu API version 18, und mit ihm die Berechtigung "Lesen".
InformationsquelleAutor der Antwort ZooS
Erlebe ich das gleiche. Was ich gefunden habe ist, dass wenn Sie gehen, um Einstellungen -> Application-Manager -> Ihrer App -> Berechtigungen -> Enable Storagees löst das Problem.
InformationsquelleAutor der Antwort Atul Kaushik
Zusätzlich zu allen Antworten, wenn die clients mit Android 6.0, Android neue Erlaubnis-Modell für (Marshmallow).
Trick: Wenn Sie auf version 22 oder unten, wird die Anwendung fordert Sie alle Berechtigungen bei der Installation Zeit nur als würde es auf jedem Gerät mit einem OS unten Marshmallow. Wenn Sie versuchen, auf den emulator aus dem android 6.0 ab, müssen Sie explizit gehen die Einstellungen->apps-> YOURAPP -> Berechtigungen und ändern Sie die Erlaubnis haben Sie keine.
InformationsquelleAutor der Antwort Nourdine Alouane
Ich würde erwarten, dass Sie alles unter
/data
zu gehören "internen Speicher". Sie sollten jedoch in der Lage sein, zu schreiben, zu/sdcard
.InformationsquelleAutor der Antwort ovenror
Ich hatte das gleiche problem und keiner der Vorschläge geholfen. Aber ich fand einen interessanten Grund dafür, auf ein physisches Gerät, Galaxy Tab.
Wenn USB-Speichergeräten, externen Speicher-lese-und Schreibberechtigungen haben keine Wirkung.
Nur USB-Speicher deaktivieren, und mit den richtigen Berechtigungen haben Sie das problem gelöst.
InformationsquelleAutor der Antwort Hamlet Kraskian
Ändern, eine Berechtigung, die Eigenschaft in Ihrem
/system/etc/permission/platform.xml
und die Gruppe muss erwähnt werden, wie es weiter unten beschrieben ist.
InformationsquelleAutor der Antwort Prabakaran
Wenn Ihre Anwendung gehört zu den system-Anwendung, es kann nicht auf die SD-Karte.
InformationsquelleAutor der Antwort will
Seltsam, nachdem Sie einen Schrägstrich "/" vor meinem newFile mein problem war gelöst. Ich änderte dies:
:
InformationsquelleAutor der Antwort Darush
Ich hatte den gleichen Fehler, wenn versucht wurde zu schreiben, ein Bild im DCIM/Kamera-Ordner auf Galaxy S5 (android 6.0.1) und ich herausgefunden, dass nur dieser Ordner ist beschränkt. Ich konnte einfach schreiben in DCIM Ordner/alle Ordner, aber nicht in der Kamera.
Diese sollte die Marke mit Sitz Einschränkung/Anpassung.
InformationsquelleAutor der Antwort RayaFeed
In meinem Fall war ich mit einem Dateiauswahl-Bibliothekdie zurückgegeben, die den Pfad zum externen Speicher, aber es wurde von
/root/
. Und auch mit der WRITE_EXTERNAL_STORAGE Erlaubnis zur Laufzeit hab ich noch Fehler EACCES (Permission denied).So verwenden
Environment.getExternalStorageDirectory()
um den richtigen Pfad zum externen Speicher.Beispiel:
Nicht schreiben kann:
/root/storage/emulated/0/newfile.txt
Schreiben können:
/storage/emulated/0/newfile.txt
Ausgang 1:
Ausgang 2:
InformationsquelleAutor der Antwort vovahost
Erstelle ich einen Ordner unter /Daten/in meiner init.rc (mucking herum mit dem aosp auf Nexus 7) und hatte genau dieses problem.
Es stellte sich heraus, dass die Ordner-rw - (666) die Erlaubnis war nicht ausreichend und es musste rwx (777) dann alles funktioniert!
InformationsquelleAutor der Antwort lane
Post 6.0 Durchsetzung von Speicher-Berechtigungen umgangen werden können, wenn Sie einen verwurzelt Gerät über diese adb-Befehle:
InformationsquelleAutor der Antwort Zakir
Vielleicht die Antwort ist diese:
auf dem API >= 23 Geräte, wenn Sie die app installieren (die app ist nicht-system-app), sollten Sie überprüfen die Speicher-Berechtigung in "Einstellungen - Anwendungen", dort ist die Berechtigung-Liste für jede app, die Sie sollten überprüfen Sie es auf! versuchen
InformationsquelleAutor der Antwort Jason Zhu
Add Permission im manifest.
InformationsquelleAutor der Antwort Harman Khera
Ich hatte das gleiche problem (API >= 23).
Die Lösung https://stackoverflow.com/a/13569364/1729501 arbeitete für mich, aber es war nicht praktisch trennen Sie die app für das debugging.
war meine Lösung zu installieren, die richtigen adb-device-Treiber für Windows. Die google-USB-Treiber nicht für mein Gerät.
SCHRITT 1: Download der adb Treiber für Ihre Geräte-Marke.
SCHRITT 2: Gehen Sie zu Geräte-manager -> andere Geräte -> suchen Sie nach Einträgen mit dem Wort "adb" -> wählen Sie Treiber Aktualisieren -> geben Sie Speicherort in Schritt 1
InformationsquelleAutor der Antwort user13107
nach hinzufügen der Berechtigung mein problem gelöst
InformationsquelleAutor der Antwort saigopi
Hinzufügen gradle dependencies
Fügen Sie folgenden code in Ihre Haupttätigkeit.
InformationsquelleAutor der Antwort ethemsulan
Gebäude auf Antwort von user462990
Benachrichtigt werden, wenn der Benutzer reagiert, um die Erlaubnis ersuchen-dialog verwenden: (code in kotlin)
}
InformationsquelleAutor der Antwort user3561494