content://media/external/file 不允许主目录音频;允许的目录是 [下载,文档] - IllegalArgumentException

我需要从服务器下载一个音频文件,它仍然可以工作 29 ,我更改了上面 30 的代码,我正面临这个问题。我在这里检查但没有找到答案。

这是我的代码片段

               File destination = new File(getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + File.separator,  urltoDownload.getName());
final String  relativeLocation = getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + File.separator + urltoDownload.getName();

            ContentValues values = new ContentValues();
            values.put(MediaStore.Audio.Media.TITLE, urltoDownload.getName());
            values.put(MediaStore.Audio.Media.DISPLAY_NAME, urltoDownload.getName());
            values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mp3");
            values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
            values.put(MediaStore.Audio.Media.DATE_TAKEN, System.currentTimeMillis());
            values.put(MediaStore.Audio.Media.RELATIVE_PATH, "Audio/" + relativeLocation); 
            Uri uri = getApplicationContext().getContentResolver().insert(MediaStore.Files.getContentUri("external"), values);

 ParcelFileDescriptor descriptor = getApplicationContext().getContentResolver().openFileDescriptor(uri,"w"); //"w" specify's write mode
            FileDescriptor fileDescriptor = descriptor.getFileDescriptor();

            InputStream dataInputStream = getApplicationContext().openFileInput(destination.getPath());
            OutputStream output = new FileOutputStream(fileDescriptor);
            byte[] buf = new byte[1024];
            int bytesRead;
            while ((bytesRead = dataInputStream.read(buf)) > 0)
            {
                output.write(buf, 0, bytesRead);
            }
            dataInputStream.close();
            output.close();
stack overflow Primary directory Audio not allowed for content://media/external/file; allowed directories are [Download, Documents] - IllegalArgumentException
原文答案

答案:

作者头像

调整 .RELATIVE_PATH 或不使用 MediaStore.Files.getContentUri("external")。不要拿.Files。一。有更适合的。

作者头像

伙计们,如果这样的代码出现在我的视频旁边,可以吗?我不是在谈论我故意点击发送到网站或其他东西。这是我认为的吗?你能从这个下载视频吗?我只想说相机有wifi选项.. content://0@media/external/file/1000000174