Подтвердить что ты не робот

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

С версией android kitkat 4.4.2 новая политика Google реализована для writeaccess, чего я пока не понимаю.

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

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

4b9b3361

Ответ 1

Я нашел рабочее решение для этой проблемы в форуме xda; нет необходимости в укоренении.
Вот пример:

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

Ответ 2

Из документов:

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

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

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

Ответ 3

Вам нужно спросить андроид о разрешении в реальном времени следующим образом:

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

Ответ 4

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

Извините за публикацию этого горького факта.

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

Но также подумайте, прежде чем обновлять jellybean до kitkat, поскольку JB - самая удобная ОС Android. и разница b/w JB и Kitkat не так высока.

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