我的应用使用DownloadManager下载pdf文件并将其保存到外部存储中的文件夹中。
File folder = new File(Environment.getExternalStorageDirectory(), "Class 10");
File chapterFile = new File(folder, "jess301.pdf");
request = new DownloadManager.Request(Uri.parse("http://www.ncert.nic.in/NCERTS/l/jess301.pdf"))
.setTitle("Book Name")
.setDescription("Chapter Name")
.setDestinationUri(Uri.fromFile(chapterFile))
.setVisibleInDownloadsUi(false);
downloadID = downloadManager.enqueue(request);
在许多设备上(例如nexus 4),下载管理器会按预期将下载的文件保存到Class 10/jess301.pdf
。
但是在某些设备上(例如Micromax A110:版本4.0.4),下载的文件会保存到不同的版本 - Class%2010/jess301.pdf
。在这些设备上,文件路径中的空格字符将替换为%20
。
当我在使用API 15的模拟器中运行代码时,它可以正常工作。
报告此问题的所有设备都运行从3.2到4.1的Android版本。但代码在相应的模拟器上正常工作。
如何在所有设备上正常运行?
我目前的解决方法是将文件从错误的位置移动到正确的位置。
This link讨论了与StreamResult相关的相同问题。