使用DownloadManager获取下载状态

4

我搜索了很多但是找不到一个令人满意的答案。 我已经简单创建了一个方法,当调用时,会在Log.i()中打印所有可用的下载状态; 下面是该方法:

DownloadManager downloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Query query = new DownloadManager.Query();              
Cursor c = downloadManager.query(query);

while (c.moveToNext()) {
            switch(c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS))) {
                  case DownloadManager.STATUS_FAILED:
                      Log.i("46dl","Download failed!");
                    break;

                  case DownloadManager.STATUS_PAUSED:
                      Log.i("46dl","Download paused!");
                    break;

                  case DownloadManager.STATUS_PENDING:
                      Log.i("46dl","Download pending!");
                    break;

                  case DownloadManager.STATUS_RUNNING:
                      Log.i("46dl","Download in progress!");
                    break;

                  case DownloadManager.STATUS_SUCCESSFUL:
                      Log.i("46dl","Download complete!");
                    break;

                  default:
                      Log.i("46dl","Download is nowhere in sight");
                    break;
                }
            }

但这只适用于从我的应用程序开始下载的情况;例如:
Request request = new Request(Uri.parse("http://www.something.com/img/img4.jpg"));
downloadManager.enqueue(request);

对于使用其他应用程序(例如浏览器)下载的其他文件,日志中没有任何行写入。

我有什么遗漏吗?感谢您的帮助!

1个回答

3

您无法获取其他应用程序下载的下载状态。这是受保护的。


你好,我没有点踩;有没有办法知道最后一个下载何时完成?因为我正在开发一个应用程序,当所有下载完成后它会关闭连接。谢谢! - Slv3r
不使用DownloadManager,在已root的设备上是可能的。通过公共URI:content://downloads/all_downloads/2334,您可以获取文件(任何人都可以访问)。但是您无法了解进度。 - RvdK
能解释一下你的踩怎么回事吗?如果安卓已经改变了 API,我会改变答案。但在发布时这是不可能的。 - RvdK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接