Android Studio 使用API29無法向手機存儲寫文件問題

Android Studio 使用API29無法向手機存儲寫文件問題

起初思路

最近在做一個項目需要把服務器的文件下載到手機存儲中,開始的思路是這樣的

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章