Howto избежать" разрешение EACCES отказано " ON SDCARD с KITKAT 4.4.2 версии . Новая политика от Google

? user1344545 @ | Original: StackOverFlow
---

С андроид KitKat 4.4.2 версииНовый Google политика, проводимая для writeaccess, что я не понимаю до сих пор.

Я много читал об этой проблеме с других приложений . Они получают" разрешение EACCES отказано " . Мое приложение необходимо написать / распаковать ZipFile, а также написать на SQLite - базе данных.

Как это EACCES доступ запрещен вопрос должен быть решен с Android версии 4.4.2 KITKAT ?

---

Top 5 ответ

1nikis @

From the docs:

Начиная с Android 4.4, несколько внешних устройств хранения данных всплыли разработчикам через Context.getExternalFilesDirs (), Context.getExternalCacheDirs () и Context.getObbDirs ().

Внешние устройства хранения данных на поверхность через эти API, должны бытьполу- постоянная часть устройства ( такие как слот SD карты в аккумуляторный отсек ) . Разработчики ожидают, данные, хранящиеся в этих местах должны быть доступны в течение длительного периода времени. По этой причине, переходные устройства хранения (например, USB- накопителей большой емкости ) не должны быть всплыли через эти API.

Разрешение WRITE_EXTERNAL_STORAGE должны только предоставить доступ на запись к внешней памяти на устройстве . Приложения не должно быть позволено написать вторичных внешних устройств хранения данных, за исключением их пакета каталогах, как это предусмотрено синтезированных разрешений. Ограничение пишет по этому пути обеспечиваетсистема может очистить файлы, когда приложения будут удалены .

2Roop The Great @

Единственное решение, как сейчас эта проблема может быть решена только путем укоренения свой ​​телефон и изменение прав доступа к доб SDCard из корневого каталога с помощью файлов исследователей, которые не рекомендуется, поскольку это аннулирует гарантию Ваши телефона, а также вызывает некоторые приложения безопасности, такие как KNOX в телефонах, таких как Samsung Galaxy S5 S4 Note3, а также примечание 2 .

Извините за размещение этой горькой факт .

Будем надеяться, обновления от самого Google, который может поставить нас из этой ситуации.

Но также думаю, перед обновлением Jellybean на KITKAT какJB наиболее удобно ОС Android. иразница ч / б JB & Amp; Kitkat не так высока .

Надеюсь, я помог U ......

3WiFi @

Я нашел рабочий раствор к этому вопросу в http://forum.xda-developers.com/showthread.php?t=2634840 ; нет необходимости в искоренении . Вотпример:

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