Ausnahme 'open failed: EACCES (Permission denied)" 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();
}
Ich hatte das gleiche problem auf einem Android-tablet, aber meine situation ist einzigartig, so dass ich meine Lösung hier in einem Kommentar. Der Fehler trat auf, wenn die Anwendung versucht, Zugriff auf das Verzeichnis /Daten/Daten/Anwendung/foo, die hatten über 50 xml-Dateien. Die app nicht sauber die Ordner durch einen bug. Nachdem einige alte Dateien, die gelöscht wurden, verschwand die Fehlermeldung. Ich weiß nicht, warum. Könnte es ein problem der generischen Android-Gerät.
Dies löste mir : stackoverflow.com/questions/33666071/...
Dies löste mir : stackoverflow.com/questions/33666071/...
InformationsquelleAutor Mert | 2012-01-13
Schreibe einen Kommentar Antworten abbrechen
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.Ich bekomme eine Warnung: "
<uses-permission>
tag erscheint nach<application>
tag"WARNUNG In android 4.4.4 verwenden Sie nicht den parameter
android:maxSdkVersion="18"
. Es war die Generierung dieses AusnahmeDiese Berechtigung durchgesetzt wird ab API-level 19. Vor API-level 19 ist, ist diese Berechtigung nicht durchgesetzt und alle apps noch Zugriff zum Lesen aus dem externen Speicher.
ich m mit API lvl 15 , ich bin immer Fehler beim verschieben von Dateien auf USB-OTG-Stick
InformationsquelleAutor 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
Praktische link mit Erklärung und Beispiele hier inthecheesefactory.com/blog/...
ist das nicht eine schlechte Sache? mit Bezug auf user experience.
Aber wo kann ich es verwenden? zum Beispiel, wenn ich eine Aufnahme machen wollen, muss ich laufen verifyStoragePermissions vor startActivityForResult, oder in onActivityResult? es ist wirklich verwirrt mich.
Dank dieser mein problem lösen. nur eine Anmerkung: wenn jemand nicht lösen können "Manifestieren.die Berechtigung" müssen Sie nur " importieren "importieren android.Manifest".
InformationsquelleAutor 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 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.
Wenn ich schließen Sie das Samsung Galaxy S6 Geräte es gibt zunächst eine option "Zugriff auf Gerätedaten" mit "DENY" oder "ALLOW" und auch von der notification bar, ich bin immer eine option USB Verwenden für 1. MTP-2. PTP 3. MIDI-Geräte 4. Aufladen. Welches man wählen?
InformationsquelleAutor 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 Piroxiljin
Erlebe ich das gleiche. Was ich gefunden habe ist, dass wenn Sie gehen, um Einstellungen -> Application-Manager -> Ihrer App -> Berechtigungen -> Enable Storage, es löst das Problem.
InformationsquelleAutor Atul Kaushik
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.
Gute Frage. Ich habe nie untersucht weitere. Ich denke, es ist eine schreib-Sperre aus dem system der moment, den Sie das Gerät angeschlossen haben (es kann also emulieren Sie ein usb-Gerät auf Ihrem computer). Vielleicht ist dies, um zu vermeiden, dass inkonsistente Daten. Nicht sicher, obwohl.
Ich habe den Grund gefunden hier stackoverflow.com/questions/7396757/... siehe auch meine Antwort stackoverflow.com/a/43863548/1729501
InformationsquelleAutor 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 ZooS
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 Nourdine Alouane
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 Hamlet Kraskian
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
.Die /data-partition ist in der Regel schreibgeschützt, um normale (nicht-root) Benutzer, die versuchen, um normale Datei zugreifen. Für den internen Speicher, gibt es spezielle Methoden, dies zu tun, vor allem, wenn Sie wollen, um access-Datenbanken. Android developer-Seiten sollte helfen Sie zu diesem Thema.
InformationsquelleAutor ovenror
Ä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.
Ich habe es versucht. Hat nicht funktioniert
Fail. Meine Gerät in eine boot-Schleife.
InformationsquelleAutor Prabakaran
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 Mahdi Mehrizi
Seltsam, nachdem Sie einen Schrägstrich "/" vor meinem newFile mein problem war gelöst. Ich änderte dies:
:
Der Fehler ist an sich schon merkwürdig, wenn man sich die Breite Palette von Antworten.
Der richtige Weg, dies zu tun ist die Verwendung von File(dir, file) cosntructor
Sie können auch File(String Pfadname). Sieht aus wie Sie sind nicht immer der Punkt hier. Die Frage ist nicht etwa, wie Sie mithilfe der File-Klasse. Die Palette der Antworten in diesem thread zeigt, wie irreführend dieser Fehler ist und wie viele Möglichkeiten der Lösung es. In meinem Fall war der Fehler die fehlende slash. Einige Leute haben es für nützlich befunden. Sicher, Sie könnte verwenden Sie Ihre eigene Methode für den Zugriff auf eine Datei. Gehen Sie voran und poste deine Antwort. Es kann löst jemand das problem.
Sie sind nicht auf den Punkt kommen. Wenn Sie den richtigen Konstruktor, dann ist dein hack ist nicht erforderlich. Mein Kommentar wurde Hinzugefügt, so kann es helfen, alle zukünftigen Leser getäuscht werden, die durch Ihre Fehler. Es war keine persönliche Kritik und nicht brauchen eine Antwort
InformationsquelleAutor Darush
Wenn Ihre Anwendung gehört zu den system-Anwendung, es kann nicht auf die SD-Karte.
InformationsquelleAutor will
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 Jason Zhu
In meinem Fall war ich mit einem Dateiauswahl-Bibliothek, die 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:
root
Teil von dem Weg ist, mein Problem gelöst.InformationsquelleAutor vovahost
beachten Sie, dass selbst wenn Sie alle die richtigen Berechtigungen in der manifest:
Der einzige Ort, 3rd-party-apps sind erlaubt zu schreiben, die auf der externen Karte sind "eigene Verzeichnisse"
(also /sdcard/Android/data/)
versucht, zu schreiben, überall sonst: Sie erhalten Ausnahme:
EACCES (Permission denied)
InformationsquelleAutor Elad
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 lane
Post 6.0 Durchsetzung von Speicher-Berechtigungen umgangen werden können, wenn Sie einen verwurzelt Gerät über diese adb-Befehle:
InformationsquelleAutor Zakir
Add Permission im manifest.
android.permission.READ_INTERNAL_STORAGE
InformationsquelleAutor 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 user13107
nach hinzufügen der Berechtigung mein problem gelöst
InformationsquelleAutor saigopi
Hinzufügen gradle dependencies
Fügen Sie folgenden code in Ihre Haupttätigkeit.
InformationsquelleAutor ethemsulan
Gebäude auf Antwort von user462990
Benachrichtigt werden, wenn der Benutzer reagiert, um die Erlaubnis ersuchen-dialog verwenden: (code in kotlin)
}
InformationsquelleAutor user3561494
In meinem Fall war der Fehler, die auf der Linie
da konnte ich nicht erstellen Sie eine neue Datei auf der sd-Karte,so hatte ich die Verwendung der DocumentFile-Ansatz.
Für die obige Frage kann das problem gelöst werden mit diesem Ansatz,
Siehe diesen thread zu,
Wie die neue SD-Karte zugreifen-API vorgestellt, Android 5.0 (Lollipop)?
InformationsquelleAutor Tarasantan