HttpUrlConnectionでapkをダウンロードする際に問題が発生しました。httpUrlConnectionでダウンロードを再開するとapkがダウンロードに失敗する
約30MBのアプリを開発し、最新のバージョンを確認してダウンロードするマネージャを作成します。 サイズの関係から、接続が切断されたり、システムによってシステムがシャットダウンされた場合、ダウンロードしたファイルサイズを確認してダウンロードを再開しました。
問題は、ダウンロードプロセス全体が一度中断された場合、apkのダウンロードをインストールするときに解析エラーが発生したことです。 これはエラーメッセージです。
解析エラー:パッケージの解析中に問題が発生しました。
private File downloadApk(File aApkFile, String aUrl, long aStartPosition, long aEndPosition) {
try {
URL url = new URL(aUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5 * 1000);
conn.setReadTimeout(5 * 1000);
conn.setRequestMethod("GET");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Range", StringFormatter.format("bytes=%s-", aStartPosition));
conn.connect();
sendUpdateNotification(0, 100); // update notifaction info
InputStream inputStream = conn.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(aApkFile);
int currentPercent = 0;
long currentDownloadSize = aStartPosition;
byte readBuffer[] = new byte[1024 * 10];
int byteReadSize = 0;
while (!((byteReadSize = inputStream.read(readBuffer)) <= 0)) {
fileOutputStream.write(readBuffer, 0, byteReadSize);
currentDownloadSize += byteReadSize;
int index = (int) (currentDownloadSize * 100/aEndPosition);
if (index != currentPercent) {
currentPercent = index;
sendUpdateNotification(currentPercent, 100);
}
}
fileOutputStream.close();
inputStream.close();
conn.disconnect();
return aApkFile;
} catch (MalformedURLException aE) {
aE.printStackTrace();
Log.e("Version", aE.getMessage());
} catch (IOException aE) {
aE.printStackTrace();
Log.e("Version", aE.getMessage());
}
return null;
}
ApkFileがここにnullになりませんダウンロードしたファイルです:
そして、ここでは、ダウンロードの私のコードです。 StartPositionはapkfileのサイズで、apkFile.length()で取得します。 Endpositionはapkの全体のサイズでconn.getContentLength()で取得します。
修正するアイデアはありますか?ありがとう。追加モードに
FileOutputStream fileOutputStream = new FileOutputStream(aApkFile);
変更:
'FileOutputStream fileOutputStream = new FileOutputStream(aApkFile);'新しいファイルを作成します。だからあなたは以前の部分的なダウンロードを捨てるでしょう。あなたはparcelableではなかったapkが元のものより少ないバイトを持っていたことに言及しなかった。私たちに知らせてください。 – greenapps