2017-03-03 84 views
0

如何檢查wther文件被下載或不是我有這樣的代碼: -Android的下載管理器查詢下載

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(uri)); 
      request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
      refrence = downloadManager.enqueue(request); 

我需要通過「refrence」查詢下載管理器?

+0

更好的方法是顯示進度條和下載文件。 爲了達到此目的,您可以獲取文件大小,然後使用公式來計算下載文件的百分比。 請點擊此鏈接:http://www.androidhive.info/2012/04/android-downloading-file-by-showing-progress-bar/ 我希望你能爲你的問題找到解決方案 – BhanuSingh

+0

我不需要顯示進度條,,這應該是一個後臺下載,,但耗時我只是使用下載管理器insted製作一項服務,我需要的是檢查文件是否正在下載,所以用戶不能點擊下載,而文件正在下載或下載完成 –

+0

好的,在這種情況下,您可以選擇邏輯如何計算文件下載的完成情況,請讓我爲您做。 – BhanuSingh

回答

1

使用查詢()打聽下載。當你調用enqueue()時,返回值就是下載的ID。您可以通過狀態以及查詢:

Cursor c = downloadManager.query(new DownloadManager.Query() 
     .setFilterByStatus(DownloadManager.STATUS_PAUSED 
       | DownloadManager.STATUS_PENDING 
       | DownloadManager.STATUS_RUNNING)); 
To be notified when a download is finished, register a BroadcastReceiver for ACTION_DOWNLOAD_COMPLETE: 

BroadcastReceiver onComplete = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // do something 
    } 
}; 

registerReceiver(onComplete, new IntentFilter(
     DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 

請注意,您也應該監聽ACTION_NOTIFICATION_CLICKED廣播知道當用戶點擊該通知正在運行的下載。

+0

你可以做一個完整的例子,所以這可以是一個完整的答案? –

-1

嘗試這段代碼:

protected String doInBackground(String... f_url) { 
      int count; 
      try { 
       URL url = new URL(f_url[0]); 
       URLConnection conection = url.openConnection(); 
       conection.connect(); 
       // getting file length 
       int lenghtOfFile = conection.getContentLength(); 

       // input stream to read file - with 8k buffer 
       InputStream input = new BufferedInputStream(url.openStream(), 8192); 

       // Output stream to write file 
       OutputStream output = new FileOutputStream("/sdcard/downloadedfile.jpg"); 

       byte data[] = new byte[1024]; 

       long total = 0; 

       while ((count = input.read(data)) != -1) { 
        total += count; 

        // writing data to file 
        output.write(data, 0, count); 
       } 
       //here you can use a flag to notify the 
       //completion of download. 
       // flushing output 
       output.flush(); 

       // closing streams 
       output.close(); 
       input.close(); 
     } catch (Exception e) { 
      Log.e("Error: ", e.getMessage()); 
     } 

     return null; 
    } 
+0

我需要使用下載管理器,它更可靠。 –