【问题标题】:How to download Muliple files (image/video url) by DownloadManager in Android如何通过 Android 中的下载管理器下载多个文件(图像/视频 url)
【发布时间】:2017-04-16 14:10:40
【问题描述】:

下载管理器是在 android 中下载单个文件的最佳方式,它还维护通知栏。但是我如何通过它下载多个文件并通过通知中的进度条显示整个下载状态。

请为它推荐任何库或任何代码 sn-p。

【问题讨论】:

  • 如果我的理解正确,默认情况下一次将两个项目加入队列将完全满足您的需求。
  • 当我多次排队时,它会在通知栏中显示多个文件正在下载,我只想要一个通知进度条用于整个多个文件。
  • 你试过什么?你的代码在哪里?
  • DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); Uri Download_Uri = Uri.parse("http://demo.mysamplecode.com/Sencha_Touch/CountryServlet?start=0&limit=999"); DownloadManager.Request request = new DownloadManager.Request(Download_Uri); downloadManager.enqueue(request);

标签: android android-download-manager


【解决方案1】:

您可能可以隐藏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());
}

【讨论】:

  • 谢谢你给我一个很好的建议,你能给我一些下载管理器上 Content Observer 的代码 sn-p 来更新通知栏,其实我是这个话题的新手。
  • 谢谢,你让我开心。
猜你喜欢
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 2021-12-21
相关资源
最近更新 更多