1

큰 파일을 다운로드하기 위해 다운로드 관리자 API를 사용 중입니다. 하지만 상황은 상태 표시 줄에 진행률 다운로드 알림이 표시됩니다. 하지만 진행률 표시 줄을 사용하여 활동 내에서 알림을 표시하려고합니다. 그래서 누군가가 그것을 한 것입니다, 만약 plz 도와주세요.다운로드 관리자를 사용하여 다운로드하는 동안 진행률 표시 줄 표시

public class DownloadManagerActivity extends Activity { 
private long enqueue; 
private DownloadManager dm; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { 
       long downloadId = intent.getLongExtra(
         DownloadManager.EXTRA_DOWNLOAD_ID, 0); 
       Query query = new Query(); 
       query.setFilterById(enqueue); 
       Cursor c = dm.query(query); 
       if (c.moveToFirst()) { 
        int columnIndex = c 
          .getColumnIndex(DownloadManager.COLUMN_STATUS); 
        if (DownloadManager.STATUS_SUCCESSFUL == c 
          .getInt(columnIndex)) { 

         ImageView view = (ImageView) findViewById(R.id.imageView1); 
         String uriString = c 
           .getString(c 
             .getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); 
         view.setImageURI(Uri.parse(uriString)); 
        } 
       } 
      } 
     } 
    }; 

    registerReceiver(receiver, new IntentFilter(
      DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 
} 

public void onClick(View view) { 
    dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
    Request request = new Request(
      Uri.parse("http://www.vogella.de/img/lars/LarsVogelArticle7.png")); 
    enqueue = dm.enqueue(request); 

} 
+0

onClick에서 진행률 표시 줄을 활성화 할 수 있습니다. onRecieve에서 그를 기각하십시오. – blay

+0

진행률 표시 줄을 어떻게 표시 할 수 있습니까? U 코드를 게시 할 수 있기 때문에 명확한 아이디어를 얻을 수 있습니다. Thanx in advance : – Rathish

답변

0

이, 을 시도하지 않았하지만 그것은 작동합니다 : 를.

BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { 
       long downloadId = intent.getLongExtra(
         DownloadManager.EXTRA_DOWNLOAD_ID, 0); 
       Query query = new Query(); 
       query.setFilterById(enqueue); 
       Cursor c = dm.query(query); 
       if (c.moveToFirst()) { 
        int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); 

        if (status == DownloadManager.STATUS_RUNNING) { 
         int bytesDownloaded = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); 
         int bytesTotal = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); 

         // do your thing... 
        } 
        if (status == DownloadManager.STATUS_SUCCESSFUL) { 

         ImageView view = (ImageView) findViewById(R.id.imageView1); 
         String uriString = c 
           .getString(c 
             .getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); 
         view.setImageURI(Uri.parse(uriString)); 
        } 
       } 
      } 
     } 
    }; 

편집 : 난 그냥 수신기는 ACTION_DOWNLOAD_COMPLETE을 등록되어 있는지 깨달았다. status_successful 브로드 캐스트를 받으면 다운로드를 시작한 후 쿼리를 중지 한 후 쿼리를 수행하려면 백그라운드 스레드 (AsyncTask)를 만들어야 할 수 있습니다. 혼란

+0

ok .. 진행중인 다운로드를 취소하는 해결책을 알고 있습니까? Asynctask .. – Rathish

+0

을 사용하지 않으면 DownloadManager에서 제거 방법이 있습니다 : http://developer.android.com/reference/android /app/DownloadManager.html#remove(long ...) – spCoder

+0

예. 나는 tat을 알고 있습니다. 그러나 우리 활동에 진도 표시 줄을 나타내는 법. 다운로드 관리자 API에서 상태 표시 줄에 진행 상황이 표시됩니다. – Rathish

1

이 죄송

내가 내 활동에 통해 진행 상태 표시 줄을 표시하는 데 사용하고 다운로드는 다운로드 관리자에 의해 요청 된 코드입니다.

final ProgressDialog progressBarDialog= new ProgressDialog(this); 
progressBarDialog.setTitle("Download App Data, Please Wait"); 

       progressBarDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      progressBarDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK",new DialogInterface.OnClickListener(){ 
       public void onClick(DialogInterface dialog, 
        int whichButton){ 
        // Toast.makeText(getBaseContext(), 
        //  "OK clicked!", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      progressBarDialog.setProgress(0); 

      new Thread(new Runnable() { 

       @Override 
       public void run() { 

        boolean downloading = true; 

        DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
        while (downloading) { 

         DownloadManager.Query q = new DownloadManager.Query(); 
         q.setFilterById(DownloadManagerId); //filter by id which you have receieved when reqesting download from download manager 
         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() { 

         progressBarDialog.setProgress((int) dl_progress); 

        } 
       }); 

       // Log.d(Constants.MAIN_VIEW_ACTIVITY, statusMessage(cursor)); 
       cursor.close(); 
      } 

     } 
    }).start(); 


    //show the dialog 
     progressBarDialog.show(); 

      } 

       } 
0

나는 늦은 답변을 알고 있습니다. 하지만 앞으로는 동일한 쿼리를 사용하게 될 것입니다.

nkalra0123의 메소드는 안전하지 않을 수 있습니다. FileObserver라는 것이 있습니다.

Android DownloadManager Progress

위에서 언급 한이 링크는 더 나은 솔루션을 제공합니다.

관련 문제