关于Android文件下载路径的坑

最近做一个项目,对方提出了一个要求APP能自动检测更新,我当时想APP自动检测更新,这个问题很简单嘛,于是乎我就开始做了。

实现思路很简单的,就是检测本地的版本号和服务器上面的版本号是否一致,如果本地的版本号小于服务器上面的版本号,就弹出一个提示框,提示更新。

因为这是我第一个项目,也是第一次做这么一个功能,就上网搜索了一下,不得不说,就这么一个功能,网上有很多的实现方式的,具体可以自行搜索

我选择的是DownloadManager这个方式来实现后台下载的(DownloadManager的具体用法自行搜索),不得不说这个封装DownloadManager非常好用,强烈推荐使用。下载完成发送一条广播,然后弹出界面安装。

问题来了,我每次下载完成过后就会提示“解析错误,解析程序包时出现问题”,这就很尴尬了。我刚开始以为是下载不完全成导致了,apk文件错误的,我通过多次调试发现,代码逻辑没有任何问题,apk文件也是完全下载好。这个时候我就把怀疑对象放到了文件路径上面了,我怀疑程序找不到apk文件才会这样报错的

这是我下载的apk路径

 //指定APK缓存路径和应用名称,可在SD卡/Android/data/包名/file/Download文件夹中查看
 request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS, "XXX.apk");

这是我查找路径apk,问题就出在这里了。/storage/emulated/0/XXX.apk 这就是查找的路径,你们是不是已经发现问题了,我apk不是保存在这个路径下面的,自然就解析出错了。问题找到了,解决方法自然就出来了

 intent.setDataAndType(Uri.fromFile(new File(getExternalStorageDirectory()+"/XXX.apk")),
                    "application/vnd.android.package-archive");

修改过后的查找路径/storage/emulated/0/Android/data/包名/files/Download,这样就可以了

intent.setDataAndType(Uri.fromFile(new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/XXX.apk")),
                    "application/vnd.android.package-archive");

如果是Android7.0以上,还会存在不能访问路径问题,这个是7.0的权限控制有关系。解决方法是,在你继承Application的类(即app单例模式那里)里面的onCreate()添加上这么一段代码。

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
        }

第一次写博客,如果有错误,欢迎指教!

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值