Introduction: Download manager based on AOSP DM but allowing downloading to internal private storage
More: Author   ReportBugs   

A library that handles long-running downloads, handling the network interactions and retrying downloads automatically after failures. Clients can request downloads in batches, receiving a single notification for all of the files allocated to a batch while being able to retrieve the single files after downloads complete.

Adding to your project

To start using this library, add these lines to the build.gradle of your project:

repositories {

dependencies {
    compile 'com.novoda:download-manager:<latest-version>'

Simple usage

  1. Create a DownloadManager:
DownloadManager downloadManager = DownloadManagerBuilder
        .newInstance(this, handler, R.mipmap.ic_launcher_round)
        .withLogHandle(new DemoLogHandle())
  1. Create a Batch of files to download:
Batch batch = Batch.with(primaryStorageWithDownloadsSubpackage, DownloadBatchIdCreator.createSanitizedFrom("batch_id_1"), "batch one title")
        .downloadFrom("").saveTo("foo/bar", "").withIdentifier(DownloadFileIdCreator.createFrom("file_id_1")).apply()
  1. Schedule the batch for download:;


CI status Download from Bintray

Snapshot builds from develop are automatically deployed to a repository that is not synced with JCenter. To consume a snapshot build add an additional maven repo as follows:

repositories {
    maven {
        url ''

You can find the latest snapshot version following this link.


We always welcome people to contribute new features or bug fixes, here is how.

If you have a problem, check the Issues Page first to see if we are already working on it.

Support Me
About Me
Google+: Trinea trinea
GitHub: Trinea