Ich triff ein Problem beim Download apk mit HttpUrlConnection.Download apk gescheitert, wenn Lebenslauf Download mit httpUrlConnection
Ich entwickle eine App über 30MB, und ich erstelle einen Manager, um die neueste Version zu überprüfen und herunterzuladen. Aufgrund seiner Größe habe ich die heruntergeladene Dateigröße überprüft und den Download fortgesetzt, wenn die Verbindung unterbrochen wurde oder die App vom System heruntergefahren wurde.
Das Problem ist, dass ein Parse-Fehler bei der Installation von download apk aufgetreten ist, wenn der gesamte Download-Prozess einmal unterbrochen wurde. Dies ist die Fehlermeldung:
Parse-Fehler: Es gab ein Problem bei der Analyse des Pakets.
Und hier ist mein Code des Herunterladens:
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 ist die heruntergeladene Datei, die hier nicht null sein wird. StartPosition ist die Größe der Apk-Datei und wird von apkFile.length() abgerufen. Endposition ist die gesamte Größe von apk und get von conn.getContentLength().
Gibt es irgendwelche Ideen, um es zu beheben? Vielen Dank.
'FileOutputStream fileOutputStream = neuer FileOutputStream (aApkFile);' Sie erstellen dort eine neue Datei. Sie würden also einen früheren partiellen Download wegwerfen. Du hast nicht erwähnt, dass die apk, die nicht parzellierbar war, weniger Bytes als die ursprüngliche hatte. Bitte informieren Sie uns. – greenapps