Howto evitare il " EACCES permesso negato " ON SDCARD con KITKAT 4.4.2 versione . Nuova politica di google

? user1344545 @ | Original: StackOverFlow
---

Con la versione di Android 4.4.2 kitkat è una nuova politica di Google implementato per WRITEACCESS, che non capisco finora .

Ho letto molto su questo problema con altre applicazioni . Ottengono un " EACCES permesso negato " . La mia applicazione ha bisogno di scrivere / decomprimere un file zip, anche scrivere in un SQLite database .

Come può questo EACCES permesso negato problema da risolvere con Android versione 4.4.2 KITKAT ?

---

Top 5 Risposta

1nikis @

From the docs:

Avvio in Android 4.4, più dispositivi di memorizzazione esterni sono emersi agli sviluppatori attraverso Context.getExternalFilesDirs ( ), Context.getExternalCacheDirs ( ), e Context.getObbDirs ( ) .

Dispositivi di memorizzazione esterni superficie attraverso queste API deve essere una parte semi- permanente del dispositivo ( ad esempio uno slot per schede SD in un vano batteria ) . Sviluppatori aspettano dati memorizzati in queste posizioni siano disponibili per lunghi periodi di tempo . Per questo motivo, i dispositivi di archiviazione transitori ( come ad esempio le unità di archiviazione di massa USB ) non devono essere rivestiti con queste API .

Il permesso WRITE_EXTERNAL_STORAGE deve concedere solo l'accesso in scrittura alla memoria esterna primario su un dispositivo . Apps non deve essere permesso di scrivere a dispositivi di memorizzazione esterni secondari, tranne che nelle directory specifiche sul pacchetto così come consentito dalle autorizzazioni sintetizzati . Limitare scrive in questo modo garantisce il sistema può ripulire i file quando le applicazioni vengono disinstallate .

2Roop The Great @

L'unica soluzione per ora è questo problema può essere risolto solo dal radicamento del telefono e la modifica delle autorizzazioni della sdcard ext dalla directory principale utilizzando esploratori di file, che non è raccomandato in quanto invalida la garanzia vostro telefono e anche scattare alcune applicazioni di sicurezza come KNOX in cellulari come Samsung Galaxy S4 S5 Nota3 e anche Nota2 .

Ci scusiamo per questo distacco fatto amara .

Speriamo un aggiornamento dal Google stessa che ci può mettere fuori da questa situazione .

Ma anche pensare prima di aggiornare Jellybean per kitkat il JB è più conveniente OS di Android . e la differenza b / w JB & amp ; Kitkat non è così alta .

Spero Ho aiutato U ......

3WiFi @

Ho trovato una soluzione di lavoro a questo problema in http://forum.xda-developers.com/showthread.php?t=2634840 ; non vi è alcuna necessità di radicazione . Ecco un esempio :

/**
 * 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);
}