2016-06-08 2 views
2

내 앱에서 Android 다운로드 관리자를 사용하고 있습니다. 활동 내 진행률 표시 줄에 그 퍼센트를 보여주는 다운로드 진행률 (예 : 알림에서 다운로드 한 비율)에 액세스하려면 어떻게해야합니까?Android 다운로드 관리자 비율에 액세스하는 방법은 무엇입니까?

//////////////////////////////////////////////////////////// 
//================== btn download set on click listner =========== 
//////////////////////////////////////////////////////////// 

holder.btnDownload.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); 
     Uri downloadUri = Uri.parse(questionha.get(position).getQuestionDownLink()); 
     if (!Uri.EMPTY.equals(downloadUri)) { 

      Request request = new Request(downloadUri); 
      request.setTitle(questionha.get(position).getQuestionTitle()); 
      request.setDescription("Downloading ...."); 
      request.setDestinationInExternalFilesDir(v.getContext(), "downloaded", questionha.get(position).getQuestionDownFileName()); 
      enqueue = dm.enqueue(request); 
     }else { 
      Log.i("Download manager","Download manager url is null !"); 
     } 

    } 
}); 

답변

2

안드로이드 다운로드 관리자 문서에서 검색 후 나는이 솔루션을 발견 :

String urlDownload = "something"; 
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(urlDownload)); 

request.setDescription("This is Desc"); 
request.setTitle("download picsArt"); 
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "teste.zip"); 

final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 

final long downloadId = manager.enqueue(request); 

final ProgressBar mProgressBar = (ProgressBar) findViewById(R.id.progressBar1); 

new Thread(new Runnable() { 

    @Override 
    public void run() { 

     boolean downloading = true; 

     while (downloading) { 

      DownloadManager.Query q = new DownloadManager.Query(); 
      q.setFilterById(downloadId); 

      Cursor cursor = manager.query(q); 
      cursor.moveToFirst(); 
      int bytes_downloaded = cursor.getInt(cursor 
        .getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); 
      int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); 

      if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) { 
       downloading = false; 
      } 

      final int dl_progress = (int) ((bytes_downloaded * 100l)/bytes_total); 

      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 

        mProgressBar.setProgress((int) dl_progress); 

       } 
      }); 
      cursor.close(); 
     } 

    } 
}).start(); 
+0

꽉 루프가 잘못된 느낌의 진행 상황을 조회

파일을 다운로드 나의 방법이다. –

+0

하지만이 코드는 저에게 효과적이며 진행 표시 줄을 업데이트합니다. 어떻게 생각하십니까? – majid

+0

나는 그 값을 끊임없이 체크함으로써 특별히 좋은 이유없이 배터리를 낭비하고 있다고 생각한다. 나는 그것이 당신이 듣거나 다른 방법으로들을 수있는 사건인지는 모르지만, 적어도 다시 쿼리 할 때까지 DB를 쿼리 한 후 조금 기다리고 싶을 것입니다. 'registerContentObserver : –