3

私のアプリケーションでは、ビデオ ファイルをダウンロードしています。ダウンロードの進行状況バーを表示したい。

AsyncTask コンセプトを通じてどのように可能ですか?

ありがとう、

ニキ

4

2 に答える 2

6

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]);
}
于 2011-03-14T08:51:21.467 に答える
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...
   }
于 2011-03-14T09:30:47.900 に答える