私のアプリケーションでは、ビデオ ファイルをダウンロードしています。ダウンロードの進行状況バーを表示したい。
AsyncTask コンセプトを通じてどのように可能ですか?
ありがとう、
ニキ
私のアプリケーションでは、ビデオ ファイルをダウンロードしています。ダウンロードの進行状況バーを表示したい。
AsyncTask コンセプトを通じてどのように可能ですか?
ありがとう、
ニキ
AsyncTask の onProgressUpdate メソッドを使用します。
ファイルのサイズがわかっている場合は、onPreExecute で最大値を設定できます。
protected void onPreExecute() {
ProgressDialog myDialog = new ProgressDialog(context);
myDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
myDialog.setMax(maxValue);
myDialog.show();
}
編集: myDialog.show(); を追加しました。
進行状況を更新するには、いくつかの方法があります。量を増やすか、進行状況を特定の値に設定します。
@Override
protected void onProgressUpdate(Integer... progress) {
myDialog.incrementProgressBy(progress[0]);
// or
// myDialog.setProgress(progress[0]);
}
次に onDoInBackground() で:
@Override
protected void doInBackGround() {
// your code
publishProgress(1);
}
レイアウト内のプログレスバーを使用した編集例:
レイアウト ファイルに、このようなプログレスバーを追加します
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:visibility="gone"
/>
そしてあなたの非同期タスクで:
protected void onPreExecute() {
ProgressBar myProgress = findViewById(R.id.progressbar);
myProgress.setMax(maxValue);
myProgress.setVisibility(View.VISIBLE);
}
protected void onProgressUpdate(Integer... progress) {
myProgress.setProgress(progress[0]);
}
最初にダウンロードティミを計算し、次に制限時間に従ってプログレスバーを実装する必要があります。ここにプログレスバーのサンプルプログラムを同封しました
new Thread(new Runnable() {
public void run() {
while (mProgressStatus < 100) {
mProgressStatus = doWork();
// Update the progress bar
mHandler.post(new Runnable() {
public void run() {
mProgress.setProgress(mProgressStatus);
}
});
そしてこれはファイルをダウンロードするための時間の長さを計算するためのコードです
//once the connection has been opened
List values = urlConnection.getHeaderFields().get("content-Length")
if (values != null && !values.isEmpty()) {
// getHeaderFields() returns a Map with key=(String) header
// name, value = List of String values for that header field.
// just use the first value here.
String sLength = (String) values.get(0);
if (sLength != null) {
//parse the length into an integer...
}