Проблема с StorageAccessFramework и DownloadManager
У меня есть одна проблема. Я занимаюсь разработкой приложения для загрузки потокового видео. Я использую DownloadManager для загрузки видео.
Запрос состоит в том, чтобы предложить пользователю выбрать место для сохранения (SDCard или внутренняя память телефона).
У меня проблемы с Lollipop с SAF и DownloadManager.
Я предлагаю пользователю выбрать каталог для хранения загружаемых файлов:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE_FOR_DESTINATION);
и в onActivityResult я получаю его через
Uri treeUri = data.getData();
DocumentFile destinationDirUri = DocumentFile.fromTreeUri(this, treeUri);
Теперь мне нужно установить этот пункт назначения в качестве пункта назначения DownloadManager.Request
Request request = new DownloadManager.Request(Uri.parse(getDownloadUrl()));
request.setTitle(downloadInfo.getTitle());
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationUri(destinationDirUri);
После того, как я выберу каталог "Загрузки / видео" и выполню
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
downloadManager.enqueue(request);
я получаю
E/RecordDownloader﹕ Error while retrieving download infos
W/System.err﹕ java.lang.IllegalArgumentException: Not a file URI: content://com.android.externalstorage.documents/tree/primary%3ADownload%2Fvideo
W/System.err﹕ at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167)
W/System.err﹕ at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
W/System.err﹕ at android.content.ContentProviderProxy.insert(ContentProviderNative.java:475)
W/System.err﹕ at android.content.ContentResolver.insert(ContentResolver.java:1207)
W/System.err﹕ at android.app.DownloadManager.enqueue(DownloadManager.java:946)
W/System.err﹕ at ch.teleboy.download.RecordDownloader.enqueueDownloadRequest(RecordDownloader.java:102)
W/System.err﹕ at ch.teleboy.download.RecordDownloader.access$300(RecordDownloader.java:48)
W/System.err﹕ at ch.teleboy.download.RecordDownloader$DownloaderTask.run(RecordDownloader.java:191)
W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
Если я пытаюсь записать какой-либо файл в выбранное место, это работает.
DocumentFile newFile = destinationDirUri.createFile("text/plain", "test.txt");
OutputStream out = getContentResolver().openOutputStream(newFile.getUri());
out.write("Some dummy text...".getBytes());
out.close()
Какие-либо предложения?