it-swarm.com.de

So vermeiden Sie die "EACCES-Berechtigung verweigert". Neue Richtlinie von Google

Mit der Android KitKat 4.4.2-Version wurde eine neue Google-Richtlinie für den Schreibzugriff implementiert, die ich bisher nicht verstehe. 

Ich habe viel über dieses Problem mit anderen Apps gelesen. Sie erhalten eine "EACCES-Berechtigung verweigert". Meine App muss eine ZIP-Datei schreiben/entpacken und auch in eine SQLite-Datenbank schreiben. 

Wie kann dieses Problem mit der EACCES-Berechtigung mit Android-Version 4.4.2 KitKat gelöst werden?

22
mcfly soft

Ich habe eine funktionierende Lösung für dieses Problem gefunden im xda forum ; es besteht kein Grund zum Verwurzeln.
Hier 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);
}
7
WiFi

Aus den Dokumenten:

Ab Android 4.4 werden mehrere externe Speichergeräte über Context.getExternalFilesDirs (), Context.getExternalCacheDirs () und Context.getObbDirs () für Entwickler angezeigt.

Externe Speichergeräte, die über diese APIs aufgetaucht sind, müssen ein semi-permanenter Teil des Geräts sein (z. B. ein SD-Kartensteckplatz in einem Batteriefach). Entwickler erwarten, dass an diesen Orten gespeicherte Daten über einen längeren Zeitraum verfügbar sind. Aus diesem Grund sollten transiente Speichergeräte (z. B. USB-Massenspeicherlaufwerke) nicht über diese APIs angezeigt werden.

Die Berechtigung WRITE_EXTERNAL_STORAGE darf nur Schreibzugriff auf den primären externen Speicher eines Geräts gewähren. Apps dürfen nicht auf sekundäre externe Speichergeräte schreiben, außer in ihren paketspezifischen Verzeichnissen, die durch synthetisierte Berechtigungen zulässig sind. Durch das Einschränken von Schreibvorgängen auf diese Weise wird sichergestellt, dass das System Dateien deinstallieren kann, wenn Anwendungen deinstalliert werden.

9
nikis

Sie müssen den Android in Echtzeit wie folgt nach der Erlaubnis fragen:

private static final int MY_PERMISSIONS_REQUEST_STORAGE = 123456;

if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(getActivity(), new String[]{Android.Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_STORAGE);
}

@Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_STORAGE: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Intent chooserIntent = cameraHelper.openImageIntent();
                    startActivityForResult(chooserIntent, MY_PERMISSIONS_REQUEST_STORAGE);
                }
            }
        }
    }
2
lucasddaniel

Die einzige Lösung besteht derzeit darin, dass dieses Problem nur gelöst werden kann, indem Sie Ihr Telefon mit einem Root-Verzeichnis mit Hilfe von Dateiexplorer rooten und die Berechtigungen der ext-SD-Karte ändern in Handys wie Samsung Galaxy S5 S4 Note3 und auch Note2.

Es tut uns leid, dass Sie diese bittere Tatsache veröffentlicht haben.

hoffen wir auf ein Update vom Google selbst, das uns aus dieser Situation herausbringen kann.

Aber denken Sie auch vor dem Update von Jellybean auf KitKat, da das JB das bequemste Betriebssystem von Android ist und der Unterschied zwischen JB und KitKat nicht so groß ist.

Hoffe ich habe geholfen ......

0
Roop The Great