Ich muss eine große Datei auf meiner App herunterladen (fast 1 GB) und ich fragte mich, was ist der beste Weg, um das zu tun und einige libs mir zu helfen. Zuerst schaute ich die Android Asynchronous Http Library an, aber ich fand keine Beispiele, die zeigen, wie man den Fortschritt veröffentlicht oder den Download pausiert. Dann weiß ich nicht, ob ich diese lib verwenden soll oder nur ein Standart-http commons verwenden soll. Anderes Problem ist, sollte ich einen Service benutzen, um meine Akte herunterzuladen?Der beste Weg, um eine große Datei in Android herunterzuladen und anzuhalten, fortzusetzen?
1
A
Antwort
0
Sie sollten verwenden, ein Systemdienst, der lange laufende HTTP-Downloads verarbeiten kann.
0
können Sie diesen Code in AsyncTask verwenden mit Lebenslauf zum Download:
@SuppressLint("Wakelock")
@Override
protected String doInBackground(String... sUrl) {
// take CPU lock to prevent CPU from going off if the user
// presses the power button during download
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
getClass().getName());
wl.acquire();
try {
InputStream input = null;
OutputStream output = null;
HttpURLConnection connection = null;
try {
URL url = new URL(sUrl[0]);
connection = (HttpURLConnection) url.openConnection();
File SDCardRoot = Environment.getExternalStorageDirectory();
File file = new File(SDCardRoot,FOLDER_PATH1+FOLDER_PATH2+ "/"+fileName);
int downloaded=0;
if(file.exists()){
downloaded=(int) file.length();
connection.setRequestProperty("Range", "bytes=" + (int) file.length() + "-");
}
else{
file.createNewFile();
}
connection.setDoInput(true);
connection.setDoOutput(true);
connection.connect();
// expect HTTP 200 OK, so we don't mistakenly save error report
// instead of the file
// this will be useful to display download percentage
// might be -1: server did not report the length
int fileLength = connection.getContentLength()+(int)file.length();
// download the file
input = connection.getInputStream();
if(downloaded>0){
output = new FileOutputStream(file,true);
}
else{
output = new FileOutputStream(file);
}
byte data[] = new byte[1024];
long total = downloaded;
int count;
mProgressDialog.setMax(fileLength/1024);
while ((count = input.read(data)) != -1) {
// allow canceling with back button
if (isCancelled())
return null;
total += count;
// publishing the progress....
if (fileLength > 0) // only if total length is known
publishProgress((int)total/1024);
output.write(data, 0, count);
}
output.flush();
if (output != null)
output.close();
if (input != null)
input.close();
if (connection != null)
connection.disconnect();
wl.release();
return null;
} catch (Exception e) {
return e.toString();
}
}
catch (Exception e) {
return e.toString();
}
}
0
Sie sollten Bibliothek verwenden, weil es & Ihr alle Testfälle behandeln es wird Ihnen helfen Zustand Download zu erhalten.
Einige Bibliotheken:
Verwandte Themen
- 1. Der einfachste Weg, um eine Datei herunterzuladen?
- 2. Ist WebClient der beste Weg, um http-Daten herunterzuladen?
- 3. Was ist der beste Weg, um eine PHP-generierte Datei herunterzuladen?
- 4. Besserer Weg, um eine Binärdatei herunterzuladen?
- 5. Der beste Weg, um eine große und komplizierte JSON-Datei mit OpenRefine (oder R)
- 6. Der beste Weg, um große Datenmengen in DataGrid zu laden
- 7. Der beste Weg, um eine große Datei in einem Byte-Array in C# zu lesen?
- 8. Der beste Weg, um große Strings in C#
- 9. Was ist der beste Weg, um eine große Menge verschiedener Informationen in Android anzuzeigen?
- 10. Der beste Weg, um eine große Fließkomma-Datei in ASCII zu analysieren?
- 11. Was ist der beste Weg, um eine große XML-Datei in einer Singleton-Klasse
- 12. Der beste Weg, um große Gruppen von Webseiten zu transformieren?
- 13. Der beste Weg, um eine Datei schreibbar in c machen #
- 14. Was ist der beste Weg, um Datei vom Server
- 15. Gibt es eine elegante Möglichkeit, eine andere Goroutine in Golang anzuhalten und fortzusetzen?
- 16. Der beste Weg, um eine XML-Datei per PHP
- 17. Der beste Weg, um eine Datei mit Küchenchef umzubenennen
- 18. Der beste Weg, um "networkaddress.cache.ttl"
- 19. Der beste Weg, um große Textdateien mit crlf Zeile Trennzeichen zu lesen
- 20. Was ist der beste und sicherste Weg, um Dateien von einem Webserver (HTTP/FTP) programmatisch herunterzuladen?
- 21. Einen Browser emulieren, um eine Datei herunterzuladen?
- 22. Was ist der beste Weg, um XLS-Datei in PHP
- 23. Python: Was ist der beste Weg, um große .csv-Datei zu lesen?
- 24. Der beste Weg zum Herunterladen einer Datei in PHP
- 25. Der beste Weg, um ein Fußzeilenmenü in Android
- 26. Der beste Weg, um eine große Anzahl von Argumenten in einen Konfigurationsdialog zu übergeben
- 27. Der beste Weg, um Android-Standard-Icons in Xamarin hinzuzufügen
- 28. Was ist der beste Weg, um eine große Datenmenge in einer Tabellenansicht zu entwickeln?
- 29. Der beste Weg, um eine URL in Vim zu öffnen
- 30. der beste Weg, um Js-Datei in Zend-Framework
Ihre Frage ein wiederholt. Bitte beachten Sie diese Frage, es könnte helfen [Laden Sie eine Datei mit Android, und zeigen Sie den Fortschritt in einem ProgressDialog] (http://StackOverflow.com/Questions/3028306/Download-a-File-with-android-and- showing-the-progress-in-a-Fortschrittdialog? noredirect = 1 & lq = 1) – Sanju