Howto evitar a " permissão EACCES negado " ON SDCARD com KitKat 4.4.2 Version. Nova política de google

? user1344545 @ | Original: StackOverFlow
---

Com o Android versão 4.4.2 KitKat é uma nova política google implementado para writeaccess, o que eu não entendo até agora.

Eu li muito sobre esta questão com outros apps. Eles recebem uma " permissão EACCES negado" . Meu aplicativo precisa escrever / descompactar um arquivo zip, também escrevo para um banco de dados SQLite .

Como isso pode EACCES permissão questão negou ser resolvido com Android versão 4.4.2 KitKat ?

---

Top 5 Responder

1nikis @

From the docs:

A partir do Android 4.4, vários dispositivos de armazenamento externos são tona para desenvolvedores através Context.getExternalFilesDirs (), Context.getExternalCacheDirs (), e Context.getObbDirs ().

Dispositivos de armazenamento externos à tona por meio dessas APIs deve ser uma parte semi- permanente do dispositivo (como um slot para cartão SD em um compartimento da bateria). Os desenvolvedores esperam que os dados armazenados nestes locais para estar disponível ao longo de grandes períodos de tempo. Por esta razão, os dispositivos de armazenamento transitório (como unidades de armazenamento em massa USB ) não devem ser revestidos por meio dessas APIs.

A permissão WRITE_EXTERNAL_STORAGE só deve conceder acesso de gravação para o primário de armazenamento externo em um dispositivo. Aplicativos não devem ser autorizados a escrever para dispositivos de armazenamento externos secundários, exceto em seus diretórios específicos do pacote, como permitido pelo permissões sintetizados. Restringindo escreve desta forma garante que o sistema pode limpar arquivos quando os aplicativos são desinstalados .

2Roop The Great @

A única solução a partir de agora é que este problema só pode ser resolvido por enraizamento seu telefone e alterar as permissões do sdcard ext do diretório raiz usando exploradores de arquivos, o que não é recomendado, pois anula a garantia seu telefone e também desencadeia alguns aplicativos de segurança como KNOX em telefones como Samsung Galaxy S4 S5 Note3 e também Obs2 .

Desculpe por postar este fato amargo.

Vamos esperar que uma atualização do próprio Google, que podem nos colocar para sair desta situação .

Mas também acho que antes de atualizar para jellybean kitkat como o JB é mais conveniente de OS Android . ea diferença b / w JB & amp; Kitkat não é tão alto .

Espero ter ajudado U ......

3WiFi @

Eu encontrei uma solução de trabalho a esta questão em http://forum.xda-developers.com/showthread.php?t=2634840 ; não há necessidade de enraizamento . Aqui está um exemplo :

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