Загрузить файл в пользовательский каталог

Я использую DownloadManager для загрузки файла на свое Android-устройство. Я могу выбрать загрузку в папку DCIM, Downloads, Picutures и т.д., Используя:

downloadRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "file.jpg");

Это работает. Но я могу выбрать только конечный набор папок для загрузки. Я хочу загрузить в корень моей SD-карты с помощью /sdcard/

Я пробовал:

downloadRequest.setDestinationUri(Uri.fromFile(new File("/sdcard/file.jpg")));

Но это делает следующее исключение:

IllegalStateException: android недействительная комбинация адресата: 4, путь:/sdcard/file.jpg

Как я могу это сделать? У меня есть все необходимые разрешения.

Ответ 1

Попробуйте это.

downloadRequest.setDestinationInExternalPublicDir("/folderName",file.jpg);

Это создаст папку в вашем внешнем корневом хранилище и поместит файл file.jpg в нее.

Ответ 2

Исправлено с помощью

request.setDestinationInExternalPublicDir( "/APP_NAME/", FileNameGetter.getFileName(DATA..url) );

Ответ 3

Согласно официальной документации вы должны использовать только один из следующих вариантов, используя один из доступных Environment.DIRECTORY_* константы:

myRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "my_sub_folder/my_file.txt");

где тип каталога (т.е. первый параметр) может не быть null, или

myRequest.setDestinationInExternalFilesDir(myContext, null, "my_sub_folder/my_file.txt");
// or
// myRequest.setDestinationInExternalFilesDir(myContext, Environment.DIRECTORY_PICTURES, "my_sub_folder/my_picture.jpg");

где тип каталога (т.е. второй параметр) может быть null.

В любом случае указание (под) папки в последнем параметре является необязательным.