私のアプリ(大体1GB)に大きなファイルをダウンロードする必要があり、私はそれを行うための最良の方法といくつかのライブラリが私を助けてくれるのだろうと思っていました。まずAndroidの非同期Httpライブラリを見ましたが、進行状況を公開する方法や開始する方法、ダウンロードを一時停止する方法を示す例は見つかりませんでした。それから私はこのlibを使うべきか、あるいはスタンダードなhttpコモンを使うべきかはわかりません。他の問題は、私は私のファイルをダウンロードするサービスを使用する必要がありますか?アンドロイドで大きなファイルをダウンロードして一時停止するには、最善の方法はありますか?
1
A
答えて
0
長時間実行されるHTTPダウンロードを処理できるシステムサービスであるDownLoad Managerを使用する必要があります。
0
あなたは履歴書をダウンロードするにはasynctaskでこのコードを使用することができます。
@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
それは状態をダウンロードし維持するためのお手伝いを致します&それはあなたのすべてのテストケースを処理するため、あなたはライブラリを使用する必要があります。
ライブラリの一部:
関連する問題
- 1. AFNetworking +大きなファイルのダウンロードを一時停止/再開
- 2. スポットアピで一時停止する方法はありますか?
- 3. SKActionsを一時停止する方法はありますか?
- 4. ページをリフレッシュして一時停止する方法はありますか?
- 5. PHP:大きなファイルをアップロードしてダウンロードする最善の方法
- 6. 一時停止ボタンはAVAudioPlayerを一時停止するのではなく停止しています。
- 7. パフォーマンスに問題がなくSKSceneを一時停止および停止する方法はありますか?
- 8. アクティビティがアンドロイドで一時停止状態になったときにインテントを停止する方法はありますか?
- 9. 例外でEclipseを一時停止する方法はありますか?
- 10. 実際にreadlineを一時停止する方法はありますか?
- 11. 一時停止したキャストビデオ(アンドロイド)の音量(ハードウェアボタン)を制御する方法はありますか?
- 12. アンドロイドでタイマーとプログレスバーを一時停止して再開する方法は?
- 13. Linux:プロセス(SIGSTOP)を停止/一時停止せずにptraceを使用する方法はありますか?
- 14. どのようにしてアンドロイドでタイマーを一時停止できますか?
- 15. スクリプト内で一時停止または待つ方法がありますか?
- 16. WebDavサーバーへのアップロード/ダウンロードの一時停止/再開方法は?
- 17. URLStreamでダウンロードを一時停止/再開しますか?
- 18. Cocos2dアンドロイドはゲームを一時停止していません
- 19. アンドロイドの活動は一時停止していません
- 20. Core Animationを一時停止して後で再開する方法はありますか?
- 21. Mavenマルチモジュールビルドを一時停止して後で再開する方法はありますか?
- 22. CountDown Timerをアンドロイドで一時停止して再開する方法
- 23. Chromeの「デバッガで一時停止した」オーバーレイを非表示にする方法はありますか?
- 24. httpsのダウンロードがPAUSED_WAITING_TO_RETRYで一時停止するのはなぜですか?
- 25. WebRequestMethods.Ftp.UploadFileプロセスを一時停止して再開する方法は?
- 26. iframeに埋め込まれているS3ビデオを一時停止/ミュートする方法はありますか?
- 27. Javaでスレッドを停止、一時停止、キャンセルする方法
- 28. スレッドを一時停止してから再開する方法はありますか?
- 29. Visual Studioでは、バックグラウンドスレッドを一時停止せずにWeb APIリクエストをデバッグする方法はありますか?
- 30. スクロールでHTML5ビデオを一時停止または停止できますか?
あなたの質問は1を繰り返しています。この質問を参考にしてください。 [Androidでファイルをダウンロードし、ProgressDialogで進行状況を表示する](http://stackoverflow.com/questions/3028306/download-a-file-with-android-and-進捗状況の進行表示を表示します(noredirect = 1&lq = 1) – Sanju