2011-08-31 221 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