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()方法出错了,于是试着自己写了下方法,发现可以正确存储文件了。
Android Studio 使用API29无法向手机存储写文件问题_第1张图片

解决代码

参考了这个博主的代码,自己没做太多修改,所以就不放自己的了,有个注意的地方是如果下载多个文件或者服务器不稳定的话,把超时时间调长一点(不然下载的数据可能出错),我后来用的时候调到了50000

con.setReadTimeout(50000);

你可能感兴趣的:(Android,Studio)