1

Я использую диспетчер загрузки api для загрузки больших файлов, и я тоже достиг этого. Но дело в том, что уведомление о ходе загрузки отображается в строке состояния. Но я хочу показать уведомление внутри действия, используя индикатор выполнения. Так кто-нибудь это сделал, если так мне помочь.Показать индикатор выполнения при загрузке с помощью диспетчера загрузки

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

Как я могу показать индикатор выполнения. Могу ли вы отправить какой-то код, так что я могу получить четкую идею. Thanx заранее :) – 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)); 
        } 
       } 
      } 
     } 
    }; 

EDIT: Я просто понял, что приемник только зарегистрированные ACTION_DOWNLOAD_COMPLETE. Возможно, вам понадобится создать фоновый поток (возможно, AsyncTask) для выполнения таких запросов ПОСЛЕ того, как вы начнете загрузку и прекратите выполнение запросов, как только вы получите статус-успешную передачу.

Извините за беспорядок

+0

ok .. У вас есть любое решение для отмены текущей загрузки. Не используя Asynctask .. – Rathish

+0

у вас есть метод remove в DownloadManager: http://developer.android.com/reference/android /app/DownloadManager.html#remove(long ...) – spCoder

+0

ya i know 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

Я знаю его опоздать, чтобы ответить. , но для ребята приходят в будущем с тем же запросом,

Метод nkalraможет быть небезопасным, я думаю. Есть что-то, называемое FileObserver.

Android DownloadManager Progress

Эта ссылка упоминалось выше, имеет лучшее решение.

Смежные вопросы