Исключение «Ошибка открытия: EACCES (Permission denied)» на Android

Я получаю

open failed: EACCES (Permission denied)

в строке OutputStream myOutput = new FileOutputStream ( outFileName);

Я проверил корень и попробовал android.permission.WRITE_EXTERNAL_STORAGE .

Как я могу решить эту проблему?

try {
    InputStream myInput;

    myInput = getAssets().open("XXX.db");

    // Path to the just created empty db
    String outFileName = "/data/data/XX/databases/"
            + "XXX.db";

    // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    // Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();
    buffer = null;
    outFileName = null;
}
catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
249
задан Randika Vishman 17 April 2019 в 17:34
поделиться

2 ответа

Для любого происходящего здесь из результатов поиска и предназначаются для Android 10: Android 10 (API 29) изменяет некоторые полномочия, связанные с устройством хранения данных.

я устранил проблему, когда я заменил свои предыдущие экземпляры Environment.getExternalStorageDirectory() (который удерживается от использования с API 29) с context.getExternalFilesDir(null).

Примечание, которое context.getExternalFilesDir(type) может возвратить пустой указатель, если место хранения не доступно, так убедиться проверить что каждый раз, когда Вы проверяете, есть ли у Вас внешние полномочия.

Read больше здесь .

0
ответ дан 23 November 2019 в 02:57
поделиться

Решение для Android Q :

<application ...
    android:requestLegacyExternalStorage="true" ... >
4
ответ дан 23 November 2019 в 02:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: