Howto vermeiden die " EACCES Zugriff verweigert " ON SDCARD mit KITKAT 4.4.2 Version . New Politik von Google

? user1344545 @ | Original: StackOverFlow
---

Mit der Android- Version 4.4.2 kitkat ist ein neues Google- Richtlinie für WRITE implementiert, die ich nicht so weit zu verstehen.

Ich lese viel über dieses Thema mit anderen Anwendungen . Sie erhalten eine " EACCES Zugriff verweigert " . Meine app braucht zu schreiben / eine Zip-Datei entpacken, auch Schreibzugriff auf eine SQLite - Datenbank.

Wie kann das EACCES Zugriff verweigert Problem mit Android-Version 4.4.2 KITKAT gelöst werden?

---

Top 5 Antwort

1nikis @

From the docs:

Ab Android 4.4 werden mehrere externe Speichergeräte an die Entwickler durch Context.getExternalFilesDirs taucht (), Context.getExternalCacheDirs () und Context.getObbDirs ().

Externe Speichergeräte aufgetaucht durch diese APIs muss ein semi-permanenten Bestandteil des Gerätes sein (wie ein SD-Kartenslot in einem Batteriefach ) . Entwickler erwarten Daten in diesen Speicherorten über lange Zeiträume zur Verfügung stehen. Aus diesem Grund sollten vorübergehende Speichergeräte (wie USB-Massenspeicher -Laufwerke) nicht durch diese APIs taucht werden.

Die WRITE_EXTERNAL_STORAGE Genehmigung darf nur erteilt Schreibzugriff auf das primäre externe Speicher auf einem Gerät . Apps dürfen nicht zugelassen werden, um sekundäre externe Speichergeräte zu schreiben, außer in ihrem Paket spezifische Verzeichnisse wie synthetisiert Berechtigungen erlaubt. Beschränken schreibt auf diese Weise gewährleistet das System Dateien bereinigen, wenn Anwendungen deinstalliert sind .

2Roop The Great @

Die einzige Lösung, ab sofort ist dieses Problem nur durch Wühlen Ihr Handy und das Ändern von Berechtigungen des ext sdcard aus dem Stammverzeichnis unter Verwendung von Datei Forscher, was nicht zu empfehlen ist, da es erlischt die Garantie bei Ihnen Telefons und löst auch einige Sicherheits Apps wie KNOX lösen in Handys wie Samsung Galaxy S4 S5 Hinweis 3 und auch Hinweis 2 .

Es tut uns leid für die Buchung dieses bittere Tatsache .

lässt hoffen, dass ein Update von der Google selbst, der uns aus dieser Situation setzen können .

Aber auch vor der Aktualisierung jellybean zu kitkat die JB am bequemsten OS des Android denken. und die Differenz S / W- JB & amp; Kitkat nicht so hoch ist .

Hoffe, dass ich geholfen U ......

3WiFi @

Ich habe eine funktionierende Lösung für dieses Problem in http://forum.xda-developers.com/showthread.php?t=2634840 ; es besteht keine Notwendigkeit für die Verwurzelung . Hier ist ein Beispiel :

/**
 * Returns an OutputStream to write to the file. The file will be truncated immediately.
 */
public OutputStream write()
        throws IOException {
    if (file.exists() && file.isDirectory()) {
        throw new IOException("File exists and is a directory.");
    }

    // Delete any existing entry from the media database.
    // This may also delete the file (for media types), but that is irrelevant as it will be truncated momentarily in any case.
    String where = MediaStore.MediaColumns.DATA + "=?";
    String[] selectionArgs = new String[] { file.getAbsolutePath() };
    contentResolver.delete(filesUri, where, selectionArgs);

    ContentValues values = new ContentValues();
    values.put(MediaStore.Files.FileColumns.DATA, file.getAbsolutePath());
    Uri uri = contentResolver.insert(filesUri, values);

    if (uri == null) {
        // Should not occur.
        throw new IOException("Internal error.");
    }

    return contentResolver.openOutputStream(uri);
}