这是我的第一篇文章 - 所以我希望在代码格式方面做的一切都是正确的。
也许您可以帮助我解决以下问题:
使用 API 级别 10 及更高版本,我所有的 HttpURLConnections 都可以正常工作,但是使用 API 级别 8 时,我尝试下载文件(txt、html……)的内容的一些(或有时大部分)失败。
只要服务器返回响应代码“-1”,我就通过重复下载来解决这个问题。这不是很令人满意,但它有效(或多或少)——但我想它只是因为我收到的内容很短(最多 100 个字符)——有时我认为最后省略了一些字符,也。
但是现在我尝试实现一个更新例程(下载并安装一个 apk 文件),但大多数情况下都失败了,因为 apk 文件是碎片化的(我猜),所以在尝试安装文件时出现“解析错误” .
我究竟做错了什么?
感谢您的任何帮助(如果您比我好,请保持友好)!
这是我的更新例程的代码(如您所见,它没有如上所述的重复机制):
String download_url = "http://url/";
String download_file = "name.apk";
//Local
String update_file = download_file;
File update_file_stream = context.getFileStreamPath(update_file);
//Connect
URL url = new URL(download_url + download_file);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
//Delete local File?
if(update_file_stream.exists()){
update_file_stream.delete();
}
//Download File
FileOutputStream fos = context.openFileOutput(update_file, Context.MODE_WORLD_READABLE);
InputStream is = c.getInputStream();
byte[] buffer = new byte[4096];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
//Install
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(update_file_stream), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);