Class DownloadManager
- java.lang.Object
-
- com.google.android.exoplayer2.offline.DownloadManager
-
public final class DownloadManager extends Object
Manages downloads.Normally a download manager should be accessed via a
DownloadService
. When a download manager is used directly instead, downloads will be initially paused and so must be resumed by callingresumeDownloads()
.A download manager instance must be accessed only from the thread that created it, unless that thread does not have a
Looper
. In that case, it must be accessed only from the application's main thread. Registered listeners will be called on the same thread. In all cases the `Looper` of the thread from which the manager must be accessed can be queried usinggetApplicationLooper()
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
DownloadManager.Listener
Listener forDownloadManager
events.
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_MAX_PARALLEL_DOWNLOADS
The default maximum number of parallel downloads.static int
DEFAULT_MIN_RETRY_COUNT
The default minimum number of times a download must be retried before failing.static Requirements
DEFAULT_REQUIREMENTS
The default requirement is that the device has network connectivity.
-
Constructor Summary
Constructors Constructor Description DownloadManager(Context context, DatabaseProvider databaseProvider, Cache cache, DataSource.Factory upstreamFactory)
Deprecated.DownloadManager(Context context, DatabaseProvider databaseProvider, Cache cache, DataSource.Factory upstreamFactory, Executor executor)
Constructs aDownloadManager
.DownloadManager(Context context, WritableDownloadIndex downloadIndex, DownloaderFactory downloaderFactory)
Constructs aDownloadManager
.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addDownload(DownloadRequest request)
Adds a download defined by the given request.void
addDownload(DownloadRequest request, int stopReason)
Adds a download defined by the given request and with the specified stop reason.void
addListener(DownloadManager.Listener listener)
Adds aDownloadManager.Listener
.Looper
getApplicationLooper()
List<Download>
getCurrentDownloads()
Returns current downloads.DownloadIndex
getDownloadIndex()
Returns the usedDownloadIndex
.boolean
getDownloadsPaused()
Returns whether downloads are currently paused.int
getMaxParallelDownloads()
Returns the maximum number of parallel downloads.int
getMinRetryCount()
Returns the minimum number of times that a download will be retried.int
getNotMetRequirements()
Returns the requirements needed for downloads to progress that are not currently met.Requirements
getRequirements()
Returns the requirements needed to be met to progress.boolean
isIdle()
Returns whether the manager is currently idle.boolean
isInitialized()
Returns whether the manager has completed initialization.boolean
isWaitingForRequirements()
Returns whether this manager has one or more downloads that are not progressing for the sole reason that theRequirements
are not met.void
pauseDownloads()
Pauses downloads.void
release()
Stops the downloads and releases resources.void
removeAllDownloads()
Cancels all pending downloads and removes all downloaded data.void
removeDownload(String id)
Cancels the download with theid
and removes all downloaded data.void
removeListener(DownloadManager.Listener listener)
Removes aDownloadManager.Listener
.void
resumeDownloads()
Resumes downloads.void
setMaxParallelDownloads(int maxParallelDownloads)
Sets the maximum number of parallel downloads.void
setMinRetryCount(int minRetryCount)
Sets the minimum number of times that a download will be retried.void
setRequirements(Requirements requirements)
Sets the requirements that need to be met for downloads to progress.void
setStopReason(String id, int stopReason)
Sets the stop reason for one or all downloads.
-
-
-
Field Detail
-
DEFAULT_MAX_PARALLEL_DOWNLOADS
public static final int DEFAULT_MAX_PARALLEL_DOWNLOADS
The default maximum number of parallel downloads.- See Also:
- Constant Field Values
-
DEFAULT_MIN_RETRY_COUNT
public static final int DEFAULT_MIN_RETRY_COUNT
The default minimum number of times a download must be retried before failing.- See Also:
- Constant Field Values
-
DEFAULT_REQUIREMENTS
public static final Requirements DEFAULT_REQUIREMENTS
The default requirement is that the device has network connectivity.
-
-
Constructor Detail
-
DownloadManager
@Deprecated public DownloadManager(Context context, DatabaseProvider databaseProvider, Cache cache, DataSource.Factory upstreamFactory)
Deprecated.Constructs aDownloadManager
.- Parameters:
context
- Any context.databaseProvider
- Provides the SQLite database in which downloads are persisted.cache
- A cache to be used to store downloaded data. The cache should be configured with anCacheEvictor
that will not evict downloaded content, for exampleNoOpCacheEvictor
.upstreamFactory
- ADataSource.Factory
for creatingDataSource
s for downloading data.
-
DownloadManager
public DownloadManager(Context context, DatabaseProvider databaseProvider, Cache cache, DataSource.Factory upstreamFactory, Executor executor)
Constructs aDownloadManager
.- Parameters:
context
- Any context.databaseProvider
- Provides the SQLite database in which downloads are persisted.cache
- A cache to be used to store downloaded data. The cache should be configured with anCacheEvictor
that will not evict downloaded content, for exampleNoOpCacheEvictor
.upstreamFactory
- ADataSource.Factory
for creatingDataSource
s for downloading data.executor
- AnExecutor
used to download data. PassingRunnable::run
will cause each download task to download data on its own thread. Passing anExecutor
that uses multiple threads will speed up download tasks that can be split into smaller parts for parallel execution.
-
DownloadManager
public DownloadManager(Context context, WritableDownloadIndex downloadIndex, DownloaderFactory downloaderFactory)
Constructs aDownloadManager
.- Parameters:
context
- Any context.downloadIndex
- The download index used to hold the download information.downloaderFactory
- A factory for creatingDownloader
s.
-
-
Method Detail
-
getApplicationLooper
public Looper getApplicationLooper()
-
isInitialized
public boolean isInitialized()
Returns whether the manager has completed initialization.
-
isIdle
public boolean isIdle()
Returns whether the manager is currently idle. The manager is idle if all downloads are in a terminal state (i.e. completed or failed), or if no progress can be made (e.g. because the download requirements are not met).
-
isWaitingForRequirements
public boolean isWaitingForRequirements()
Returns whether this manager has one or more downloads that are not progressing for the sole reason that theRequirements
are not met. This is true if:- The
Requirements
are not met. - The downloads are not paused (i.e.
getDownloadsPaused()
isfalse
). - There are downloads in the
queued state
.
- The
-
addListener
public void addListener(DownloadManager.Listener listener)
Adds aDownloadManager.Listener
.- Parameters:
listener
- The listener to be added.
-
removeListener
public void removeListener(DownloadManager.Listener listener)
Removes aDownloadManager.Listener
.- Parameters:
listener
- The listener to be removed.
-
getRequirements
public Requirements getRequirements()
Returns the requirements needed to be met to progress.
-
getNotMetRequirements
@RequirementFlags public int getNotMetRequirements()
Returns the requirements needed for downloads to progress that are not currently met.- Returns:
- The not met
Requirements.RequirementFlags
, or 0 if all requirements are met.
-
setRequirements
public void setRequirements(Requirements requirements)
Sets the requirements that need to be met for downloads to progress.- Parameters:
requirements
- ARequirements
.
-
getMaxParallelDownloads
public int getMaxParallelDownloads()
Returns the maximum number of parallel downloads.
-
setMaxParallelDownloads
public void setMaxParallelDownloads(@IntRange(from=1L) int maxParallelDownloads)
Sets the maximum number of parallel downloads.- Parameters:
maxParallelDownloads
- The maximum number of parallel downloads. Must be greater than 0.
-
getMinRetryCount
public int getMinRetryCount()
Returns the minimum number of times that a download will be retried. A download will fail if the specified number of retries is exceeded without any progress being made.
-
setMinRetryCount
public void setMinRetryCount(int minRetryCount)
Sets the minimum number of times that a download will be retried. A download will fail if the specified number of retries is exceeded without any progress being made.- Parameters:
minRetryCount
- The minimum number of times that a download will be retried.
-
getDownloadIndex
public DownloadIndex getDownloadIndex()
Returns the usedDownloadIndex
.
-
getCurrentDownloads
public List<Download> getCurrentDownloads()
Returns current downloads. Downloads that are in terminal states (i.e. completed or failed) are not included. To query all downloads including those in terminal states, usegetDownloadIndex()
instead.
-
getDownloadsPaused
public boolean getDownloadsPaused()
Returns whether downloads are currently paused.
-
resumeDownloads
public void resumeDownloads()
Resumes downloads.If the
Requirements
are met up tomaxParallelDownloads
will be started, excluding those with non-zerostopReasons
.
-
pauseDownloads
public void pauseDownloads()
Pauses downloads. Downloads that would otherwise be making progress will transition toDownload.STATE_QUEUED
.
-
setStopReason
public void setStopReason(@Nullable String id, int stopReason)
Sets the stop reason for one or all downloads. To clear the stop reason, passDownload.STOP_REASON_NONE
.- Parameters:
id
- The content id of the download to update, ornull
to set the stop reason for all downloads.stopReason
- The stop reason, orDownload.STOP_REASON_NONE
.
-
addDownload
public void addDownload(DownloadRequest request)
Adds a download defined by the given request.- Parameters:
request
- The download request.
-
addDownload
public void addDownload(DownloadRequest request, int stopReason)
Adds a download defined by the given request and with the specified stop reason.- Parameters:
request
- The download request.stopReason
- An initial stop reason for the download, orDownload.STOP_REASON_NONE
if the download should be started.
-
removeDownload
public void removeDownload(String id)
Cancels the download with theid
and removes all downloaded data.- Parameters:
id
- The unique content id of the download to be started.
-
removeAllDownloads
public void removeAllDownloads()
Cancels all pending downloads and removes all downloaded data.
-
release
public void release()
Stops the downloads and releases resources. Waits until the downloads are persisted to the download index. The manager must not be accessed after this method has been called.
-
-