В моем случае я использовал библиотеку для выбора файлов , которая возвращала путь к внешнему хранилищу, но начиналась с /root/
. И даже с разрешением WRITE_EXTERNAL_STORAGE , предоставленным во время выполнения, я все еще получаю ошибку EACCES (разрешение отклонено) .
Поэтому используйте Environment.getExternalStorageDirectory()
, чтобы получить правильный путь к внешнему хранилищу.
Пример:
Невозможно написать: /root/storage/emulated/0/newfile.txt
Можно написать: /storage/emulated/0/newfile.txt
boolean externalStorageWritable = isExternalStorageWritable();
File file = new File(filePath);
boolean canWrite = file.canWrite();
boolean isFile = file.isFile();
long usableSpace = file.getUsableSpace();
Log.d(TAG, "externalStorageWritable: " + externalStorageWritable);
Log.d(TAG, "filePath: " + filePath);
Log.d(TAG, "canWrite: " + canWrite);
Log.d(TAG, "isFile: " + isFile);
Log.d(TAG, "usableSpace: " + usableSpace);
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
Выход 1:
externalStorageWritable: true
filePath: /root/storage/emulated/0/newfile.txt
isFile: false
usableSpace: 0
Выход 2:
externalStorageWritable: true
filePath: /storage/emulated/0/newfile.txt
isFile: true
usableSpace: 1331007488