Google is committed to advancing racial equity for Black communities. See how.
Added in API level 9

DownloadManager

open class DownloadManager
kotlin.Any
   ↳ android.app.DownloadManager

The download manager is a system service that handles long-running HTTP downloads. Clients may request that a URI be downloaded to a particular destination file. The download manager will conduct the download in the background, taking care of HTTP interactions and retrying downloads after failures or across connectivity changes and system reboots.

Apps that request downloads through this API should register a broadcast receiver for ACTION_NOTIFICATION_CLICKED to appropriately handle when the user clicks on a running download in a notification or from the downloads UI.

Note that the application must have the android.Manifest.permission#INTERNET permission to use this class.

Summary

Nested classes

open

This class may be used to filter download manager queries.

open

This class contains all the information necessary to request a new download.

Constants

static String

Broadcast intent action sent by the download manager when a download completes.

static String

Broadcast intent action sent by the download manager when the user clicks on a running download, either from a system notification or from the downloads UI.

static String

Intent action to launch an activity to display all downloads.

static String

Number of bytes download so far.

static String

The client-supplied description of this download.

static String

An identifier for a particular download, unique across the system.

static String

Timestamp when the download was last modified, in System#currentTimeMillis (wall clock time in UTC).

static String

Path to the downloaded file on disk.

static String

Uri where downloaded file will be stored.

static String

The URI to the corresponding entry in MediaProvider for this downloaded entry.

static String

Internet Media Type of the downloaded file.

static String

Provides more detail on the status of the download.

static String

Current status of the download, as one of the STATUS_* constants.

static String

The client-supplied title for this download.

static String

Total size of the download in bytes.

static String

URI to be downloaded.

static Int

Value of COLUMN_REASON when some possibly transient error occurred but we can't resume the download.

static Int

Value of COLUMN_REASON when no external storage device was found.

static Int

Value of COLUMN_REASON when the requested destination file already exists (the download manager will not overwrite an existing file).

static Int

Value of COLUMN_REASON when a storage issue arises which doesn't fit under any other error code.

static Int

Value of COLUMN_REASON when an error receiving or processing data occurred at the HTTP level.

static Int

Value of COLUMN_REASON when there was insufficient storage space.

static Int

Value of COLUMN_REASON when there were too many redirects.

static Int

Value of COLUMN_REASON when an HTTP code was received that download manager can't handle.

static Int

Value of COLUMN_ERROR_CODE when the download has completed with an error that doesn't fit under any other error code.

static String

Intent extra included with ACTION_DOWNLOAD_COMPLETE intents, indicating the ID (as a long) of the download that just completed.

static String

When clicks on multiple notifications are received, the following provides an array of download ids corresponding to the download notification that was clicked.

static String

Intent extra included with ACTION_VIEW_DOWNLOADS to start DownloadApp in sort-by-size mode.

static Int

Value of COLUMN_REASON when the download exceeds a size limit for downloads over the mobile network and the download manager is waiting for a Wi-Fi connection to proceed.

static Int

Value of COLUMN_REASON when the download is paused for some other reason.

static Int

Value of COLUMN_REASON when the download is waiting for network connectivity to proceed.

static Int

Value of COLUMN_REASON when the download is paused because some network error occurred and the download manager is waiting before retrying the request.

static Int

Value of COLUMN_STATUS when the download has failed (and will not be retried).

static Int

Value of COLUMN_STATUS when the download is waiting to retry or resume.

static Int

Value of COLUMN_STATUS when the download is waiting to start.

static Int

Value of COLUMN_STATUS when the download is currently running.

static Int

Value of COLUMN_STATUS when the download has successfully completed.

Public methods

open Long
addCompletedDownload(title: String!, description: String!, isMediaScannerScannable: Boolean, mimeType: String!, path: String!, length: Long, showNotification: Boolean)

Adds a file to the downloads database system, so it could appear in Downloads App (and thus become eligible for management by the Downloads App).

open Long
addCompletedDownload(title: String!, description: String!, isMediaScannerScannable: Boolean, mimeType: String!, path: String!, length: Long, showNotification: Boolean, uri: Uri!, referer: Uri!)

Adds a file to the downloads database system, so it could appear in Downloads App (and thus become eligible for management by the Downloads App).

open Long

Enqueue a new download.

open static Long!

Returns maximum size, in bytes, of downloads that may go over a mobile connection; or null if there's no limit

open String!

Returns the media type of the given downloaded file id, if the file was downloaded successfully.

open static Long!

Returns recommended maximum size, in bytes, of downloads that may go over a mobile connection; or null if there's no recommended limit.

open Uri!

Returns the Uri of the given downloaded file id, if the file is downloaded successfully.

open ParcelFileDescriptor!

Open a downloaded file for reading.

open Cursor!

Query the download manager about downloads that have been requested.

open Int
remove(vararg ids: Long)

Cancel downloads and remove them from the download manager.

Constants

ACTION_DOWNLOAD_COMPLETE

Added in API level 9
static val ACTION_DOWNLOAD_COMPLETE: String

Broadcast intent action sent by the download manager when a download completes.

Value: "android.intent.action.DOWNLOAD_COMPLETE"

ACTION_NOTIFICATION_CLICKED

Added in API level 9
static val ACTION_NOTIFICATION_CLICKED: String

Broadcast intent action sent by the download manager when the user clicks on a running download, either from a system notification or from the downloads UI.

Value: "android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"

ACTION_VIEW_DOWNLOADS

Added in API level 9
static val ACTION_VIEW_DOWNLOADS: String

Intent action to launch an activity to display all downloads.

Value: "android.intent.action.VIEW_DOWNLOADS"

COLUMN_BYTES_DOWNLOADED_SO_FAR

Added in API level 9
static val COLUMN_BYTES_DOWNLOADED_SO_FAR: String

Number of bytes download so far.

Value: "bytes_so_far"

COLUMN_DESCRIPTION

Added in API level 9
static val COLUMN_DESCRIPTION: String

The client-supplied description of this download. This will be displayed in system notifications. Defaults to the empty string.

Value: "description"

COLUMN_ID

Added in API level 9
static val COLUMN_ID: String

An identifier for a particular download, unique across the system. Clients use this ID to make subsequent calls related to the download.

Value: "_id"

COLUMN_LAST_MODIFIED_TIMESTAMP

Added in API level 9
static val COLUMN_LAST_MODIFIED_TIMESTAMP: String

Timestamp when the download was last modified, in System#currentTimeMillis (wall clock time in UTC).

Value: "last_modified_timestamp"

COLUMN_LOCAL_FILENAME

Added in API level 11
Deprecated in API level 24
static val COLUMN_LOCAL_FILENAME: String

Deprecated: apps should transition to using ContentResolver#openFileDescriptor(Uri, String) instead.

Path to the downloaded file on disk.

Note that apps may not have filesystem permissions to directly access this path. Instead of trying to open this path directly, apps should use ContentResolver#openFileDescriptor(Uri, String) to gain access.

Value: "local_filename"

COLUMN_LOCAL_URI

Added in API level 9
static val COLUMN_LOCAL_URI: String

Uri where downloaded file will be stored. If a destination is supplied by client, that URI will be used here. Otherwise, the value will initially be null and will be filled in with a generated URI once the download has started.

Value: "local_uri"

COLUMN_MEDIAPROVIDER_URI

Added in API level 9
static val COLUMN_MEDIAPROVIDER_URI: String

The URI to the corresponding entry in MediaProvider for this downloaded entry. It is used to delete the entries from MediaProvider database when it is deleted from the downloaded list.

Value: "mediaprovider_uri"

COLUMN_MEDIA_TYPE

Added in API level 9
static val COLUMN_MEDIA_TYPE: String

Internet Media Type of the downloaded file. If no value is provided upon creation, this will initially be null and will be filled in based on the server's response once the download has started.

Value: "media_type"

See Also

  • <a href="http://www.ietf.org/rfc/rfc1590.txt">RFC 1590, defining Media Types</a>

COLUMN_REASON

Added in API level 9
static val COLUMN_REASON: String

Provides more detail on the status of the download. Its meaning depends on the value of COLUMN_STATUS. When COLUMN_STATUS is STATUS_FAILED, this indicates the type of error that occurred. If an HTTP error occurred, this will hold the HTTP status code as defined in RFC 2616. Otherwise, it will hold one of the ERROR_* constants. When COLUMN_STATUS is STATUS_PAUSED, this indicates why the download is paused. It will hold one of the PAUSED_* constants. If COLUMN_STATUS is neither STATUS_FAILED nor STATUS_PAUSED, this column's value is undefined.

Value: "reason"

See Also

  • <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1.1">RFC 2616

COLUMN_STATUS

Added in API level 9
static val COLUMN_STATUS: String

Current status of the download, as one of the STATUS_* constants.

Value: "status"

COLUMN_TITLE

Added in API level 9
static val COLUMN_TITLE: String

The client-supplied title for this download. This will be displayed in system notifications. Defaults to the empty string.

Value: "title"

COLUMN_TOTAL_SIZE_BYTES

Added in API level 9
static val COLUMN_TOTAL_SIZE_BYTES: String

Total size of the download in bytes. This will initially be -1 and will be filled in once the download starts.

Value: "total_size"

COLUMN_URI

Added in API level 9
static val COLUMN_URI: String

URI to be downloaded.

Value: "uri"

ERROR_CANNOT_RESUME

Added in API level 9
static val ERROR_CANNOT_RESUME: Int

Value of COLUMN_REASON when some possibly transient error occurred but we can't resume the download.

Value: 1008

ERROR_DEVICE_NOT_FOUND

Added in API level 9
static val ERROR_DEVICE_NOT_FOUND: Int

Value of COLUMN_REASON when no external storage device was found. Typically, this is because the SD card is not mounted.

Value: 1007

ERROR_FILE_ALREADY_EXISTS

Added in API level 9
static val ERROR_FILE_ALREADY_EXISTS: Int

Value of COLUMN_REASON when the requested destination file already exists (the download manager will not overwrite an existing file).

Value: 1009

ERROR_FILE_ERROR

Added in API level 9
static val ERROR_FILE_ERROR: Int

Value of COLUMN_REASON when a storage issue arises which doesn't fit under any other error code. Use the more specific ERROR_INSUFFICIENT_SPACE and ERROR_DEVICE_NOT_FOUND when appropriate.

Value: 1001

ERROR_HTTP_DATA_ERROR

Added in API level 9
static val ERROR_HTTP_DATA_ERROR: Int

Value of COLUMN_REASON when an error receiving or processing data occurred at the HTTP level.

Value: 1004

ERROR_INSUFFICIENT_SPACE

Added in API level 9
static val ERROR_INSUFFICIENT_SPACE: Int

Value of COLUMN_REASON when there was insufficient storage space. Typically, this is because the SD card is full.

Value: 1006

ERROR_TOO_MANY_REDIRECTS

Added in API level 9
static val ERROR_TOO_MANY_REDIRECTS: Int

Value of COLUMN_REASON when there were too many redirects.

Value: 1005

ERROR_UNHANDLED_HTTP_CODE

Added in API level 9
static val ERROR_UNHANDLED_HTTP_CODE: Int

Value of COLUMN_REASON when an HTTP code was received that download manager can't handle.

Value: 1002

ERROR_UNKNOWN

Added in API level 9
static val ERROR_UNKNOWN: Int

Value of COLUMN_ERROR_CODE when the download has completed with an error that doesn't fit under any other error code.

Value: 1000

EXTRA_DOWNLOAD_ID

Added in API level 9
static val EXTRA_DOWNLOAD_ID: String

Intent extra included with ACTION_DOWNLOAD_COMPLETE intents, indicating the ID (as a long) of the download that just completed.

Value: "extra_download_id"

EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS

Added in API level 11
static val EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS: String

When clicks on multiple notifications are received, the following provides an array of download ids corresponding to the download notification that was clicked. It can be retrieved by the receiver of this Intent using android.content.Intent#getLongArrayExtra(String).

Value: "extra_click_download_ids"

INTENT_EXTRAS_SORT_BY_SIZE

Added in API level 12
static val INTENT_EXTRAS_SORT_BY_SIZE: String

Intent extra included with ACTION_VIEW_DOWNLOADS to start DownloadApp in sort-by-size mode.

Value: "android.app.DownloadManager.extra_sortBySize"

PAUSED_QUEUED_FOR_WIFI

Added in API level 9
static val PAUSED_QUEUED_FOR_WIFI: Int

Value of COLUMN_REASON when the download exceeds a size limit for downloads over the mobile network and the download manager is waiting for a Wi-Fi connection to proceed.

Value: 3

PAUSED_UNKNOWN

Added in API level 9
static val PAUSED_UNKNOWN: Int

Value of COLUMN_REASON when the download is paused for some other reason.

Value: 4

PAUSED_WAITING_FOR_NETWORK

Added in API level 9
static val PAUSED_WAITING_FOR_NETWORK: Int

Value of COLUMN_REASON when the download is waiting for network connectivity to proceed.

Value: 2

PAUSED_WAITING_TO_RETRY

Added in API level 9
static val PAUSED_WAITING_TO_RETRY: Int

Value of COLUMN_REASON when the download is paused because some network error occurred and the download manager is waiting before retrying the request.

Value: 1

STATUS_FAILED

Added in API level 9
static val STATUS_FAILED: Int

Value of COLUMN_STATUS when the download has failed (and will not be retried).

Value: 16

STATUS_PAUSED

Added in API level 9
static val STATUS_PAUSED: Int

Value of COLUMN_STATUS when the download is waiting to retry or resume.

Value: 4

STATUS_PENDING

Added in API level 9
static val STATUS_PENDING: Int

Value of COLUMN_STATUS when the download is waiting to start.

Value: 1

STATUS_RUNNING

Added in API level 9
static val STATUS_RUNNING: Int

Value of COLUMN_STATUS when the download is currently running.

Value: 2

STATUS_SUCCESSFUL

Added in API level 9
static val STATUS_SUCCESSFUL: Int

Value of COLUMN_STATUS when the download has successfully completed.

Value: 8

Public methods

addCompletedDownload

Added in API level 12
Deprecated in API level 29
open fun addCompletedDownload(
    title: String!,
    description: String!,
    isMediaScannerScannable: Boolean,
    mimeType: String!,
    path: String!,
    length: Long,
    showNotification: Boolean
): Long

Deprecated: Apps should instead contribute files to android.provider.MediaStore.Downloads collection to make them available to user as part of Downloads.

Adds a file to the downloads database system, so it could appear in Downloads App (and thus become eligible for management by the Downloads App).

It is helpful to make the file scannable by MediaScanner by setting the param isMediaScannerScannable to true. It makes the file visible in media managing applications such as Gallery App, which could be a useful purpose of using this API.

For applications targeting android.os.Build.VERSION_CODES#Q or above, path must be within directories owned by the application {e.g. Context#getExternalFilesDir(String)} or if the application is running under the legacy storage model (see android:requestLegacyExternalStorage), path can also be within the top-level Downloads directory (as returned by Environment#getExternalStoragePublicDirectory(String) with Environment#DIRECTORY_DOWNLOADS).

Parameters
title String!: the title that would appear for this file in Downloads App.
description String!: the description that would appear for this file in Downloads App.
isMediaScannerScannable Boolean: true if the file is to be scanned by MediaScanner. Files scanned by MediaScanner appear in the applications used to view media (for example, Gallery app).
mimeType String!: mimetype of the file.
path String!: absolute pathname to the file. The file should be world-readable, so that it can be managed by the Downloads App and any other app that is used to read it (for example, Gallery app to display the file, if the file contents represent a video/image).
length Long: length of the downloaded file
showNotification Boolean: true if a notification is to be sent, false otherwise
Return
Long an ID for the download entry added to the downloads app, unique across the system This ID is used to make future calls related to this download.

addCompletedDownload

Added in API level 24
Deprecated in API level 29
open fun addCompletedDownload(
    title: String!,
    description: String!,
    isMediaScannerScannable: Boolean,
    mimeType: String!,
    path: String!,
    length: Long,
    showNotification: Boolean,
    uri: Uri!,
    referer: Uri!
): Long

Deprecated: Apps should instead contribute files to android.provider.MediaStore.Downloads collection to make them available to user as part of Downloads.

Adds a file to the downloads database system, so it could appear in Downloads App (and thus become eligible for management by the Downloads App).

It is helpful to make the file scannable by MediaScanner by setting the param isMediaScannerScannable to true. It makes the file visible in media managing applications such as Gallery App, which could be a useful purpose of using this API.

For applications targeting android.os.Build.VERSION_CODES#Q or above, path must be within directories owned by the application {e.g. Context#getExternalFilesDir(String)} or if the application is running under the legacy storage model (see android:requestLegacyExternalStorage), path can also be within the top-level Downloads directory (as returned by Environment#getExternalStoragePublicDirectory(String) with Environment#DIRECTORY_DOWNLOADS).

Parameters
title String!: the title that would appear for this file in Downloads App.
description String!: the description that would appear for this file in Downloads App.
isMediaScannerScannable Boolean: true if the file is to be scanned by MediaScanner. Files scanned by MediaScanner appear in the applications used to view media (for example, Gallery app).
mimeType String!: mimetype of the file.
path String!: absolute pathname to the file. The file should be world-readable, so that it can be managed by the Downloads App and any other app that is used to read it (for example, Gallery app to display the file, if the file contents represent a video/image).
length Long: length of the downloaded file
showNotification Boolean: true if a notification is to be sent, false otherwise
uri Uri!: the original HTTP URI of the download
referer Uri!: the HTTP Referer for the download
Return
Long an ID for the download entry added to the downloads app, unique across the system This ID is used to make future calls related to this download.

enqueue

Added in API level 9
open fun enqueue(request: DownloadManager.Request!): Long

Enqueue a new download. The download will start automatically once the download manager is ready to execute it and connectivity is available.

Parameters
request DownloadManager.Request!: the parameters specifying this download
Return
Long an ID for the download, unique across the system. This ID is used to make future calls related to this download.

getMaxBytesOverMobile

Added in API level 11
open static fun getMaxBytesOverMobile(context: Context!): Long!

Returns maximum size, in bytes, of downloads that may go over a mobile connection; or null if there's no limit

Parameters
context Context!: the Context to use for accessing the ContentResolver
Return
Long! maximum size, in bytes, of downloads that may go over a mobile connection; or null if there's no limit

getMimeTypeForDownloadedFile

Added in API level 11
open fun getMimeTypeForDownloadedFile(id: Long): String!

Returns the media type of the given downloaded file id, if the file was downloaded successfully. Otherwise, null is returned.

Parameters
id Long: the id of the downloaded file.
Return
String! the media type of the given downloaded file id, if download was successful. null otherwise.

getRecommendedMaxBytesOverMobile

Added in API level 11
open static fun getRecommendedMaxBytesOverMobile(context: Context!): Long!

Returns recommended maximum size, in bytes, of downloads that may go over a mobile connection; or null if there's no recommended limit. The user will have the option to bypass this limit.

Parameters
context Context!: the Context to use for accessing the ContentResolver
Return
Long! recommended maximum size, in bytes, of downloads that may go over a mobile connection; or null if there's no recommended limit.

getUriForDownloadedFile

Added in API level 11
open fun getUriForDownloadedFile(id: Long): Uri!

Returns the Uri of the given downloaded file id, if the file is downloaded successfully. Otherwise, null is returned.

Parameters
id Long: the id of the downloaded file.
Return
Uri! the Uri of the given downloaded file id, if download was successful. null otherwise.

openDownloadedFile

Added in API level 9
open fun openDownloadedFile(id: Long): ParcelFileDescriptor!

Open a downloaded file for reading. The download must have completed.

Parameters
id Long: the ID of the download
Return
ParcelFileDescriptor! a read-only ParcelFileDescriptor
Exceptions
java.io.FileNotFoundException if the destination file does not already exist

query

Added in API level 9
open fun query(query: DownloadManager.Query!): Cursor!

Query the download manager about downloads that have been requested.

Parameters
query DownloadManager.Query!: parameters specifying filters for this query
Return
Cursor! a Cursor over the result set of downloads, with columns consisting of all the COLUMN_* constants.

remove

Added in API level 9
open fun remove(vararg ids: Long): Int

Cancel downloads and remove them from the download manager. Each download will be stopped if it was running, and it will no longer be accessible through the download manager. If there is a downloaded file, partial or complete, it is deleted.

Parameters
ids Long: the IDs of the downloads to remove
Return
Int the number of downloads actually removed