下载的apk无法安装等问题,文件无法打开

[DESCRIPTION]

 

     浏览器下载文件时,有时会遇到下载后文件无法打开,比如ogg3gp等格式,或者下载的apk无法安装等问题。这类问题一般是sever返回的mimetype有问题,导致打开时,发往其他appIntent不能被正常处理。例如无法安装apk文件,一般通过搜索关键字"DownloadManager",会搜到类似如下的log:

 

06-27 14:20:15.364   919   919 W DownloadManager:Failed to start Intent { act=android.intent.action.VIEWdat=content://downloads/all_downloads/9 typ=application/octet-stream flg=0x3 }:android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEWdat=content://downloads/all_downloads/9 typ=application/octet-stream flg=0x3 }

 

      log信息可以看出:mime typ=application/octet-stream 不能被处理。

 

      主要原因是:下载apk时,server返回application/octet-stream,不是标准的mimetype: application/vnd.android.package-archive,

 

 导致htmlviewer无法打开该inent. 这类一般是server issue,若server返回的是标准的:application/vnd.android.package-archive就不会有

 

这样的问题.

 

[SOLUTION]

 

      先确认无法打开文件的正确mimetype,然后在DownloadHandler.java中的DownloadStartNoStream()作特殊处理。将sever返回错误的mime

 

制修正成正确的mime type即可。下面给出以无法打开apk为例的修改方案,同理,其他格式的文件也是类似的。

 

修改文件:\packages\apps\Browser\src\com\android\browser\DownloadHandler.java


修改方法:onDownloadStartNoStream()


具体修改:
public static void onDownloadStartNoStream(Activity activity,String url, String userAgent, String contentDisposition, String mimetype,String referer, boolean privateBrowsing, long contentLength) {
String filename = URLUtil.guessFileName(url, contentDisposition,mimetype); 
Xlog.d(XLOGTAG, "Guess file name is: " + filename + " mimetypeis: " + mimetype);

 

// modify start:   change Mime for apk

if (filename.endsWith(".apk") &&mimetype.equals("application/octet-stream")) 
{

      mimetype ="application/vnd.android.package-archive";
}

// modify end

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值