首先我怀疑下载的apk包的时候出现了问题,或许是在数据流传输的过程中丢包了,造成apk文件不完整。于是我查看了一下下载方法。发现程序中是用File.createTempFile的方法进行下载的,而使用File.createTempFile方法下载的文件,在不同Android系统下文件的存储位置不同。
在android1.6、android2.2、android2.3.x系统下,用File.createTempFile方法创建的文件会存放到sd卡上;在android 4.1.1系统下,则会将临时文件存放到/data/data/应用包名/cache目录下,而这个目录仅对本应用程序有读写权限,所以当程序下载成功后发送意图(Intent)给系统安装时,系统安装程序没有访问该文件的权限,于是系统就会打印“ Permission denied ”的log,弹出“解析包时出现错误”。
因为魅族2X的Flyme2.0系统是基于Android4.1系统修改的,所以会出现这个问题。
那么我们如何解决这个问题呢,我的解决方法是,让系统自带的浏览器去下载,如此一来下载下来的apk包文件就不会存在权限不足的问题了。
我这里使用的是HttpUtils.download进行下载的这个方法参数的意义:
/**
* 参数一:下载地址,参数二:下载到的本地的路径,
* 参数三:如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。
* 参数四:如果从请求返回信息中获取到文件名,下载完成后自动重命名。
*/
- Intent intent = new Intent();
- intent.setAction("android.intent.action.VIEW");
- Uri content_url = Uri.parse(url);
- intent.setData(content_url);
- startActivity(intent);
很有可能是因为路径问题,最好不要写成sdcard/Download/,这样就可能出现解析包错误,建议改成 Environment.getExternalStorageDirectory()+"/Download/",就不会出现解析包的问题了