起初思路
最近在做一個項目需要把服務器的文件下載到手機存儲中,開始的思路是這樣的
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);