Я получаю
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();
}
Для любого происходящего здесь из результатов поиска и предназначаются для Android 10: Android 10 (API 29) изменяет некоторые полномочия, связанные с устройством хранения данных.
я устранил проблему, когда я заменил свои предыдущие экземпляры Environment.getExternalStorageDirectory()
(который удерживается от использования с API 29) с context.getExternalFilesDir(null)
.
Примечание, которое context.getExternalFilesDir(type)
может возвратить пустой указатель, если место хранения не доступно, так убедиться проверить что каждый раз, когда Вы проверяете, есть ли у Вас внешние полномочия.
Read больше здесь .
Решение для Android Q :
<application ...
android:requestLegacyExternalStorage="true" ... >