【Android】DownloadManager 打开url下载的APK文件无法打开的问题 cannot open file

本文主要探讨了在Android中使用DownloadManager下载APK文件时遇到的'cannot open file'问题。通过设置mimeType为'application/vnd.android.package-archive',无论是监控DownloadManager还是直接指定请求的mimeType,都能避免此错误,确保APK文件能够正常打开。参考了KyleCe的博客文章以获取解决方案。

问题如标题
想用浏览器下载,或者下载器下载

应用场景有以下几种:

1.监控DownloadManager,文件下载完成时以文件路径的形式发送intent:

 // install work
 Intent install = new Intent(Intent.ACTION_VIEW);

install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

 String filePath = "file://" +
 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/" +urlMap.get(String.valueOf(downloadId));

install.setDataAndType(Uri.parse(filePath),"application/vnd.android.package-archive");
 startActivity(install);

关键就是这里:

promptInstall.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/myApp.apk")),
"application/vnd.android.package-archive");

需要设置mimeType为”application/vnd.android.package-archive”

————————————————————————————————

2.形式:DownloadManager添加之初就指定该下载文件为APK文件,方法如下:(因为项目需求,并不能使Activity保持在内存中,无法注册BroadcastReceiver监控下载管理器)
(关于下载管理器的使用办法,中文教程看这里(较繁琐,不推荐))更清晰的英文教程


        // parse url
        Uri mUri = Uri.parse(url);

        // create request
        DownloadManager.Request r = new DownloadManager.Request(mUri);

        // set request property
        r.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "YourApkName.apk");
        r.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

        // create manager
        DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

        // key code, set mine type
        r.setMimeType("application/vnd.android.package-archive");

        // add to queue
        dm.enqueue(r);

其核心也就是设置DownloadManager的request的mimeType为”application/vnd.android.package-archive”;
这样设置之后,打开下载的APK就不会报“无法打开文件”的错误了;

转载署源-By-KyleCe: http://blog.youkuaiyun.com/kyleceshen/article/details/50319525

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值