I want to achieve that when downloading, it can be paused, stopped by user. How can I achieve this with DownloadManager?
-
1I also wish to know this. I tried to stop downloads with remove(ids) method, and it seems to work if we check it in Downloads table, but in notification area it still is shown as downloading. – morphium Dec 07 '11 at 05:12
-
Downloads table I am talking about is accessible by using this: Intent i = new Intent(); i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS); startActivity(i); – morphium Dec 07 '11 at 05:13
-
I am new to Android, but I have created a Download Manager using C++ Qt, Here is link to my implementation, if you plan to implement download manager yourself then it might help. http://kunalmaemo.blogspot.com/2010/05/simple-download-manager-in-qt-with.html – Kunal Jan 09 '12 at 09:44
-
I have seen another Android download manager that works. http://stackoverflow.com/a/22346459/185022 – AZ_ Mar 12 '14 at 09:03
3 Answers
You can remove a download from the queue. Then you can start it up again, passing the Range
HTTP Header when re-adding it to the queue (like TryTryAgain mentioned). I don't believe this currently can be done more easily.

- 5,018
- 2
- 20
- 36
-
1I've tried your idea but it seems it doesn't work or did I miss something important. I get the bytes of data that has been downloaded and I rename the file to prevent on removing when executing downloadmanager.remove(referenceId) into the DownloadManager. And Create a request again with corresponding request.addRequestHeader("Range", "bytes=" +bytesStored+"-"); and enqueue again to create a download again. Can you help me about it? – Cjames Feb 14 '14 at 03:49
It may be that "pausing" isn't exactly necessary for you? As DownloadManager actually doesn't need to pause to be resumed.
Instead you may be getting tripped up with resuming? See if this helps:
how to resume an interrupted download Where the solution is implementing a Range request header...
// 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();
Unless you need to actually allow "pausing" (because of switching file download priority, maintaining a list or something else more complicated) and not just provide resuming capability, that should help.

- 1
- 1

- 7,632
- 11
- 46
- 82
Do you mean to do this in Web Application ?
I am also thinking about the same thing. This might have been possible with flash or sliverlight etc., but in pure HTML?
On the server side we can use RandomAccessFileReader(Apache) or similar FileReader (in bytes) to access file and write to output stream. We can remember how much bytes was downloaded in previous session by the user too. But the problem is there is no standard way to save file to disk in the client's local file system. You can use ActiveX Object in IE to write some file provided it is a sequential (plain text) file and not binary file(like mp3, flv etc). But this ActiveX is not a solution. So you may need to design something like 'Downloader' for you website. Just like Youtube Downloader.

- 1,010
- 2
- 11
- 22
-
1I am talking about the API for DownloadManager in android. I want to know DownloadManager has api about pause/resume. – David Guo Jan 04 '12 at 08:52