今天给大家伙儿唠唠我在安卓上下载文件的那些事儿,真的是一把鼻涕一把泪,踩不少坑,现在总算能比较顺畅地搞定,赶紧分享出来,希望能帮到各位。
我想着这下载文件嘛简单!直接用浏览器不就得?
- 第一步:打开浏览器,Chrome也自带的也随便哪个。
- 第二步:找到要下载的链接,点一下。
结果?有些能下,有些死活不动弹,还有的直接给我跳到乱七八糟的页面。我就纳闷,这安卓下载文件也太随缘?
摸索阶段:DownloadManager 初体验
不行,总得找个靠谱点的法子。后来我才知道安卓有个 DownloadManager,听起来就很专业的样子。于是就开始研究这玩意儿。
- 第一步:得先获取 DownloadManager 的实例,这好办,*(*_SERVICE) 一下就行。
- 第二步:构造一个 *,把下载地址、保存路径啥的都塞进去。
- 第三步:调用 *(request) 开始下载。
看着挺简单的?但是!问题来。权限!安卓 6.0 之后,权限管理严格,光声明权限还不行,还得动态申请。还得加一段权限申请的代码,判断有没有读写外部存储的权限,没有就弹个对话框让用户授权。烦!
踩坑之旅:各种奇葩问题
好不容易把权限搞定,以为能一帆风顺?Naive!
- 问题一:下载的文件死活找不到。搞半天才发现,原来是保存路径没设置对,或者设置但是目录不存在。得确保目录存在,而且有读写权限。
- 问题二:下载到一半就断。这个更坑,查半天资料,发现是网络问题。得判断网络状态,没网络就别下载,或者断线重连的时候重新下载。
- 问题三:下载完成之后不知道怎么打开。这个也比较常见,因为不同的文件类型需要不同的应用来打开。得根据文件的 MIME 类型,调用系统相应的应用来打开。
为解决这些问题,我可是费不少劲,各种百度、Google,各种 Stack Overflow。真是头发都快掉光。
最终方案:封装一个简单的下载工具类
折腾这么久,总算摸索出一个比较靠谱的方案。为方便以后使用,我把这些代码封装成一个简单的下载工具类,以后直接调用就行。
这个工具类主要做以下几件事:
- 权限检查:自动检查读写外部存储的权限,没有就申请。
- 下载:使用 DownloadManager 下载文件,支持断点续传。
- 监听下载状态:监听下载完成、失败等状态,并通过回调函数通知调用者。
- 打开文件:根据文件类型,自动调用系统相应的应用来打开文件。
用这个工具类之后,下载文件就方便多,再也不用担心各种奇葩问题。虽然代码写得比较糙,但是能用就行。毕竟我不是专业的安卓开发,能搞定就不错。
安卓下载文件看似简单,坑不少。要想搞定它,需要耐心、细心,还得不断学习。希望我的这些经验能帮到大家,少走一些弯路。
免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。