android: разрешение EACCS отклонено при использовании context.getExternalFilesDir - PullRequest
0 голосов
/ 16 марта 2020

Я в основном пытаюсь загрузить файл с 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, как упомянуто выше, но это не помогло мне решить проблему!

...