如何在 Android 中通过下载管理器下载多个文件 (image/video url)
How to download Muliple files (image/video url) by DownloadManager in Android
下载管理器是在 android 中下载单个文件的最佳方式,它维护通知栏 also.but 我如何通过它下载多个文件并通过通知中的进度条显示整个下载状态.
请为它建议任何库或任何代码片段。
您或许可以隐藏 DownloadManager
的通知并显示您自己的通知,这应该可以满足您的需要。
禁用setNotificationVisibility(DownloadManger.VISIBILITY_HIDDEN);
隐藏通知。
要显示下载进度,您可以在 DownloadManager
的数据库上注册一个 ContentObserver
以获取定期更新并使用它更新您自己的通知。
Cursor mDownloadManagerCursor = mDownloadManager.query(new DownloadManager.Query());
if (mDownloadManagerCursor != null) {
mDownloadManagerCursor.registerContentObserver(mDownloadFileObserver);
}
ContentObserver
看起来像:
private ContentObserver mDownloadFileObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
@Override
public void onChange(boolean selfChange) {
Cursor cursor = mDownloadManager.query(new DownloadManager.Query());
if (cursor != null) {
long bytesDownloaded = 0;
long totalBytes = 0;
while (cursor.moveToNext()) {
bytesDownloaded += cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
totalBytes += cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
}
float progress = (float) (bytesDownloaded * 1.0 / totalBytes);
showNotificationWithProgress(progress);
cursor.close();
}
}
};
进度通知可以显示为:
public void showNotificationWithProgress(Context context, int progress) {
NotificationManagerCompat.from(context).notify(0,
new NotificationCompat.Builder(context)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Downloading...")
.setContentText("Progress")
.setProgress(100, progress * 100, false)
.setOnGoing(true)
.build());
}
下载管理器是在 android 中下载单个文件的最佳方式,它维护通知栏 also.but 我如何通过它下载多个文件并通过通知中的进度条显示整个下载状态.
请为它建议任何库或任何代码片段。
您或许可以隐藏 DownloadManager
的通知并显示您自己的通知,这应该可以满足您的需要。
禁用setNotificationVisibility(DownloadManger.VISIBILITY_HIDDEN);
隐藏通知。
要显示下载进度,您可以在 DownloadManager
的数据库上注册一个 ContentObserver
以获取定期更新并使用它更新您自己的通知。
Cursor mDownloadManagerCursor = mDownloadManager.query(new DownloadManager.Query());
if (mDownloadManagerCursor != null) {
mDownloadManagerCursor.registerContentObserver(mDownloadFileObserver);
}
ContentObserver
看起来像:
private ContentObserver mDownloadFileObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
@Override
public void onChange(boolean selfChange) {
Cursor cursor = mDownloadManager.query(new DownloadManager.Query());
if (cursor != null) {
long bytesDownloaded = 0;
long totalBytes = 0;
while (cursor.moveToNext()) {
bytesDownloaded += cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
totalBytes += cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
}
float progress = (float) (bytesDownloaded * 1.0 / totalBytes);
showNotificationWithProgress(progress);
cursor.close();
}
}
};
进度通知可以显示为:
public void showNotificationWithProgress(Context context, int progress) {
NotificationManagerCompat.from(context).notify(0,
new NotificationCompat.Builder(context)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Downloading...")
.setContentText("Progress")
.setProgress(100, progress * 100, false)
.setOnGoing(true)
.build());
}