起初思路
最近在做一个项目需要把服务器的文件下载到手机存储中,开始的思路是这样的
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("http://www.xxx.com/" + filename));
request.setTitle("下载xxx数据");
request.setDescription("正在下载xxx数据.....");
request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS + "/data/Type1/", str);
downloadManager.enqueue(request);
存在问题
这个思路在API23测试时候可以正确下载并保存文件,但是在29时候直接没法下载文件了(应该是没法创建filename文件)。
解决思路
官方文档给的是在AndroidManifest.xml中的application中添加如下属性,但是我添加之后依然不能正确存储文件,考虑可能是setDestinationInExternalFilesDir()方法出错了,于是试着自己写了下方法,发现可以正确存储文件了。
解决代码
参考了这个博主的代码,自己没做太多修改,所以就不放自己的了,有个注意的地方是如果下载多个文件或者服务器不稳定的话,把超时时间调长一点(不然下载的数据可能出错),我后来用的时候调到了50000
con.setReadTimeout(50000);