Я в основном пытаюсь загрузить файл с URL-адреса. Поэтому я решил сохранить файл моего приложения. Поэтому я использовал getExternalFilesDir , так что мне не требуется никаких разрешений, появляющихся по этим ссылкам. :
Нужна ли мне проверка прав доступа для записи в путь getExternalFilesDir () в зефире?
разрешения getExternalFilesDir
Смерть внешнего хранилища: конец саги (?)
Однако работает на android 8.0, но на моем устройстве Letv Le 1s Marshmellow без разрешения на хранение, это не работает!
Ниже приведен мой код:
if(TextUtils.isEmpty(urlString))
return;
URL u = new URL(urlString);
is = u.openStream();
dis = new DataInputStream(is);
byte[] buffer = new byte[1024];
int length;
File storageDir = new File(getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_MOVIES).toString(), "downloads/");
String fileNameFromUrl = urlString.substring(urlString.lastIndexOf("/")+1,urlString.length());
String ext = urlString.substring(urlString.lastIndexOf(".") + 1, urlString.length());
storageDir.mkdirs(); // make sure you call mkdirs() and not mkdir()
File downloadPath = new File(storageDir + File.separator + fileNameFromUrl);
if(downloadPath.exists()){
downloadPath.delete();
}
downloadPath.createNewFile();
путь загрузки / storage / emulated / 0 / Android / data / com.example / files /Movies/downloads/file.mp4
Эта строка downloadPath.createNewFile (), выбрасывает java .io.IOException: открыть не удалось: EACCES (В доступе отказано)
Моя идея состоит в том, чтобы использовать каталог приложения для чтения и записи файлов для использования в приложении, а не в sk для разрешений хранения. Так что я использовал context.getExternalFilesDir.
Я исследовал много ссылок SOF, как упомянуто выше, но это не помогло мне решить проблему!