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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值