2017-03-21 1 views
3

Android 용 다운로드 관리자를 사용하여 Android 앱을 코딩했으며 아래 코드를 사용하여 다운로드 진행 상태를 표시하려고합니다.진행률 대화 상자가있는 Android 다운로드 관리자

myTimer.schedule(new TimerTask() { 

     public void run() { 
      try { 
       DownloadManager.Query q; 
       q = new DownloadManager.Query(); 
       q.setFilterById(preferenceManager.getLong(strPref_Download_ID, 0)); 
       cursorTimer = downloadManager.query(q); 
       cursorTimer.moveToFirst(); 
       int bytes_downloaded = cursorTimer.getInt(cursorTimer.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); 
       bytes_total = cursorTimer.getInt(cursorTimer.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); 
       final int dl_progress = (int) ((double) bytes_downloaded * 100f/(double) bytes_total); 
       mProgressDialog.setProgress((int) dl_progress); 
      } catch (Exception e) { 
      } finally { 
      } 
     } 
    }, 0, 10); 

모든게 잘 작동하지만, 진행 대화 상자가 나는 ..... (100)는 1,2,3,4,5,6을 표시하고자하는 의미 부드러운 pregress 표시되지 않습니다.

처음에는 0으로 표시되고 갑자기 12 %로 변경된 후 31 % 등으로 100 % 변경됩니다. 내 파일의 총 크기가 0 %의 시간에, 26,246,026 바이트 내 다운로드 한 파일의 크기가 6668 바이트, 12 내 다운로드 한 파일의 크기가 3,197,660 바이트 %, 등시 ... 문서에서

답변

0

,

공개 무효 스케줄 (TimerTask를 태스크 긴 지연, 장기간)

일정 특정 지연을 반복 고정 지연 실행 위한 작업.

매개 변수
작업 - 예약 할 작업.
지연 - 첫 번째 실행 전의 시간 (밀리 초).
기간 - 후속 실행 사이의 시간 간격 (밀리 초).

여기서 코드 기간은 10 밀리 초입니다. 그게 문제 일 수 있습니다. 대신 1 밀리를 시도하십시오.

myTimer.schedule(new TimerTask() { 
}, 0, 1); 
0

먼저 UI가 너무 자주 쿼리되지 않으므로 진행을 원활하게 변경하려면 ValueAnimator을 사용하십시오.

myTimer.schedule(new TimerTask() { 

     public void run() { 
      try { 
       DownloadManager.Query q; 
       q = new DownloadManager.Query(); 
       q.setFilterById(preferenceManager.getLong(strPref_Download_ID, 0)); 
       cursorTimer = downloadManager.query(q); 
       cursorTimer.moveToFirst(); 
       int bytes_downloaded = cursorTimer.getInt(cursorTimer.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); 
       bytes_total = cursorTimer.getInt(cursorTimer.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); 
       final int dl_progress = (int) ((double) bytes_downloaded * 100f/(double) bytes_total); 
       changeProgressSmoothly((int) dl_progress); 
      } catch (Exception e) { 
      } finally { 
      } 
     } 
    }, 0, 5000); 



private void changeProgressSmoothly(int progress) { 
     ValueAnimator va = ValueAnimator.ofInt(mProgressDialog.getProgress(), progress); 

     int mDuration = 2000; //in millis 
     va.setDuration(mDuration); 
     va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
      public void onAnimationUpdate(ValueAnimator animation) { 
       mProgressDialog.setProgress((int) animation.getAnimatedValue()); 
      } 
     }); 
     va.start(); 

    } 
+0

여전히 0을 보이지 않는다. – user3068659

+0

코드를 지금 구현 한 방법에 대해 공유하십시오. – Karacken

관련 문제