安卓下载意图

38

我想知道下载URL的意图是什么?在浏览器中,它会使用一个小通知图标下载东西。我想知道我是否可以使用这个意图(以及它是什么)。


我真的不知道你在这里问什么,请澄清。 - Chris Ballance
重新审视这个旧问题 - 这是一个私有意图。请查看AOSP中的DownloadManager。 - Isaac Waller
你有关于如何调用DownloadManager的链接/指南/源代码吗?但是,它是私有的,因此我们无法使用,你是否找到了其他下载文件的替代方法? - TiGer
我有同样的问题。我想通过URL和文件名获取意图以进行下载,但我不知道如何获取意图和如何接收它。 - user307577
4个回答

72

应用程序可以像浏览器和 Gmail 一样使用下载管理器来下载文件。这从Gingerbread开始就可用。

您的应用程序需要INTERNET权限来启动下载。为将文件保存在默认的下载目录中,还需要WRITE_EXTERNAL_STORAGE权限。

以下是您可以下载URI的方法:

DownloadManager.Request r = new DownloadManager.Request(uri);

// This put the download in the same Download dir the browser uses
r.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "fileName");

// When downloading music and videos they will be listed in the player
// (Seems to be available since Honeycomb only)
r.allowScanningByMediaScanner();

// Notify user when download is completed
// (Seems to be available since Honeycomb only)
r.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

// Start download
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(r);

有很多其他的选项可以自定义通知,查询下载状态并设置下载位置。

这篇博客文章展示了如何在早期版本的Android中通过隐藏的API使用下载管理器。


为什么在Android 4.4上总是显示“下载失败”? - Kimi Chiu

22
尽管我不认为浏览器中有下载意图,但你可以使用普通的 ACTION_VIEW 意图,并让浏览器基于内容类型决定是否应下载或查看URL。
因此,从您的代码触发。
new Intent(Intent.ACTION_VIEW, Uri.parse(url))

并希望这将在浏览器中触发下载。


这个会在浏览器中下载,但是没有进度条或用户反馈 - 我只会收到一个下载完成的通知。 - Mike Redrobe
此解决方案仅适用于 Android 10 及以下版本。(针对媒体文件) - Aniket-Shinde

2

你想做什么?如果你的应用程序想要下载文件,可以使用UrlConnection代码。如果你想下载一个包,那么ACTION_PACKAGE_INSTALL应该是你想要的。


我知道,但浏览器有一个下载-通知-东西,如果它是公共意图,我想我可以直接使用它。我想我必须手动完成它。谢谢,Isaac。 - Isaac Waller
3
我了解这篇文章比较老,但是被接受的回答并不是最好的回答,实际上对于问题的要求来说根本不算回答。更好的、评分更高的“正确”回答在下面由Alexandre Jasmin提供。 - Josh

-1

1
这很好,但没有人开始下载(也许是浏览器的下载,我会尝试一下)。无论如何,谢谢。 - Isaac Waller
不,浏览器的那个不行 - 无论如何还是谢谢。我可能得手动做。 - Isaac Waller

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