私のアプリ(大体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. スポットアピで一時停止する方法はありますか?
- 2. AFNetworking +大きなファイルのダウンロードを一時停止/再開
- 3. SKActionsを一時停止する方法はありますか?
- 4. ページをリフレッシュして一時停止する方法はありますか?
- 5. PHP:大きなファイルをアップロードしてダウンロードする最善の方法
- 6. ボタンクリック時にアンドロイドでHttpurlconnectionを一時停止する方法
- 7. 一時停止ボタンはAVAudioPlayerを一時停止するのではなく停止しています。
- 8. パフォーマンスに問題がなくSKSceneを一時停止および停止する方法はありますか?
- 9. アクティビティがアンドロイドで一時停止状態になったときにインテントを停止する方法はありますか?
- 10. 例外でEclipseを一時停止する方法はありますか?
- 11. 実際にreadlineを一時停止する方法はありますか?
- 12. 一時停止したキャストビデオ(アンドロイド)の音量(ハードウェアボタン)を制御する方法はありますか?
- 13. 一時停止して再開できるモバイル用のアニメーションを作成する最善の方法OnClick
- 14. アンドロイドでタイマーとプログレスバーを一時停止して再開する方法は?
- 15. Linux:プロセス(SIGSTOP)を停止/一時停止せずにptraceを使用する方法はありますか?
- 16. 一時停止/一時停止後に一時停止したシーン(停止していない状態)でSKActionを実行しないようにするには、一時停止/一時停止後にノードのテクスチャは変更されません。
- 17. Androidでokhttpでダウンロードを一時停止/再開する方法
- 18. どのようにしてアンドロイドでタイマーを一時停止できますか?
- 19. スクリプト内で一時停止または待つ方法がありますか?
- 20. 一時停止ボタンをクリックしたときにMediaElementでクリックイベントを書き込む方法はありますか?
- 21. 大きなファイルの解析日時を改善する方法はありますか?
- 22. WebDavサーバーへのアップロード/ダウンロードの一時停止/再開方法は?
- 23. バインド一時停止し、私は一時停止を割り当て、別のボタンに一時停止することができAHKで同じキー
- 24. 大きなリレーショナルデータベースをリファクタリングし改善する方法はありますか?
- 25. ファイルの上書きを停止する方法はありますか?
- 26. URLStreamでダウンロードを一時停止/再開しますか?
- 27. キャンバスで図面を停止または一時停止する方法
- 28. Cocos2dアンドロイドはゲームを一時停止していません
- 29. 動画は一時停止ではなく、最初から停止して再生されます。AVPlayer
- 30. アンドロイドの活動は一時停止していません
あなたの質問は1を繰り返しています。この質問を参考にしてください。 [Androidでファイルをダウンロードし、ProgressDialogで進行状況を表示する](http://stackoverflow.com/questions/3028306/download-a-file-with-android-and-進捗状況の進行表示を表示します(noredirect = 1&lq = 1) – Sanju