2011-08-31 55 views
13

我想在下載時實現這一點,它可以暫停,由用戶停止。我如何使用DownloadManager實現這一目標?如何使用DownloadManager暫停?

+0

我也想知道這一點。我嘗試使用remove(ids)方法停止下載,如果我們在Downloads表中檢查它,但似乎仍然可以正常工作,但在通知區域它仍顯示爲正在下載。 – morphium

+0

下載表我在說的是可以使用這個: Intent i = new Intent(); \t \t \t \t i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS); startActivity(i); – morphium

+0

我是新來的Android,但我創建了一個使用C++ Qt的下載管理器,這裏是我的實現的鏈接,如果你打算自己實現下載管理器,那麼它可能會有所幫助。 http://kunalmaemo.blogspot.com/2010/05/simple-download-manager-in-qt-with.html – Kunal

回答

1

您的意思是在Web應用程序中執行此操作嗎?

我還想到同樣的事情。這可能是閃光或sliverlight等可能,但在純HTML?

在服務器端,我們可以使用RandomAccessFileReader(Apache的)或類似的FileReader(以字節爲單位)來訪問文件,並寫入輸出流。我們可以記住用戶在前一個會話中下載了多少字節。但問題是在客戶端的本地文件系統中沒有將文件保存到磁盤的標準方式。您可以在IE中使用ActiveX對象編寫一些文件,只要它是一個順序(純文本)文件而不是二進制文件(如mp3,flv等)。但是這個ActiveX不是一個解決方案。所以你可能需要爲你的網站設計一些類似'Downloader'的東西。就像Youtube Downloader一樣。

+1

我在說android的DownloadManager的API。我想知道DownloadManager有關於暫停/恢復的api。 –

2

這可能是「暫停」對你來說不完全是必要的嗎?由於DownloadManager實際doesn't need to pause待續。

相反,你可能會被絆倒恢復?看看這有助於:

how to resume an interrupted download凡解決方案實施一系列請求頭......

// Open connection to URL. 
HttpURLConnection connection = 
     (HttpURLConnection) url.openConnection(); 

// Specify what portion of file to download. 
connection.setRequestProperty("Range", "bytes=" + downloaded + "-"); 
// here "downloaded" is the data length already previously downloaded. 

// Connect to server. 
connection.connect(); 

除非你需要真正允許「暫停」(因爲開關文件下載優先級,維持列表或其他更復雜的東西),而不僅僅是提供恢復能力,這應該有所幫助。

5

您可以從隊列中remove a download。然後你可以重新啓動它,在將它重新添加到隊列時傳遞Range HTTP Header(如提到的TryTryAgain)。我不認爲目前可以更輕鬆地完成。

+1

我試過你的想法,但它似乎不工作,或者我錯過了重要的事情。我得到已下載的數據字節,並重命名該文件以防止在執行downloadmanager.remove(referenceId)時將其移除到DownloadManager中。並用相應的request.addRequestHeader(「Range」,「bytes =」+ bytesStored +「 - 」)再次創建一個請求;並再次入隊以再次創建下載。你能幫我解答嗎? – Cjames