java .lang.IllegalStateException: Не один из стандартных каталогов: / storage / emulated / 0 / Download / on Android 10 - PullRequest
0 голосов
/ 09 марта 2020

Я хочу загрузить и сохранить файл из моего URL-адреса во внешнем каталоге загрузки в Android 10. Я использовал этот код для загрузки.

    public void StartNewDownload(String url) {

    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
    request.setDescription("Downloading Profile"); 
    request.setTitle("Abc App");
    request.setDestinationInExternalPublicDir(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+ File.separator, "parag.jpeg"); 

    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    final long downloadId = manager.enqueue(request); 

}

показывает ошибку

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.ab c, PID: 15197

java.lang.IllegalStateException: Not one of standard directories: /storage/emulated/0/Download/
    at android.os.Parcel.createException(Parcel.java:2079)
    at android.os.Parcel.readException(Parcel.java:2039)
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
    at android.content.ContentProviderProxy.call(ContentProviderNative.java:658)
    at android.content.ContentProviderClient.call(ContentProviderClient.java:558)
    at android.content.ContentProviderClient.call(ContentProviderClient.java:546)
    at android.app.DownloadManager$Request.setDestinationInExternalPublicDir(DownloadManager.java:569)
    at com.example.abc.Activity.showDetails.StartNewDownload(showDetails.java:102)
    at com.example.abc.Activity.showDetails$1.onClick(showDetails.java:68)

Но если я использую

request.setDestinationInExternalFilesDir(this,Environment.DIRECTORY_DOWNLOADS+ File.separator , "parag.jpeg");

при этом файл загружается, но в папке моего приложения указано c, но я хочу загрузить файл во внешний каталог c download

1 Ответ

1 голос
/ 09 марта 2020

согласно вашему коду getExternalStoragePublicDirectory API устарел.

используйте приведенный ниже код для сохранения файла в стандартном каталоге.

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES,"parag.jpeg")

он попытается сохранить в стандартном каталоге

/storage/emulated/0/Android/data/packagename/files/Pictures/parag.jpg

Для приложений, нацеленных на Build.VERSION_CODES.Q или выше, разрешение WRITE_EXTERNAL_STORAGE не требуется, и dirType должен быть одним из известных каталогов publi c, таких как Environment # DIRECTORY_DOWNLOADS, Среда # DIRECTORY_PICTURES, Среда # DIRECTORY_MOVIES, et c.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...