像Android Market一样下载文件

4
我将要实现一个下载大文件(大约50MB)的后台函数。
我希望像Android市场一样实现 - 当用户开始下载文件时,它将出现在状态栏中,并且具有进度条以及当下载完成时通知我的应用程序。
你能给我提供一些提示吗?我知道我的问题并不是很高质量,但我之前已经做过研究,但是我没有关键字搜索任何解决方案。
2个回答

7

这只是一个简要概述,为您提供一些关键词。

首先,如何创建通知应该非常简单,并且有很好的文档记录。如果您不知道如何创建普通通知,请查看状态栏通知

下一步是创建一个包含ProgressBar的自定义布局的通知 (因为我所知道的没有预构建的布局),这也在同一页上有记录。一旦您为此创建了Notification实例,您应该保留引用并使用它来更新您的ProgressBar通过

notification.contentView.setProgressBar(R.id.yourprogressbar, 100, 42, false);
nm.notify(notificationId, notification);

nm 在这里是指 NotificationManager 的一个引用,也可以查看RemoteViews.setProgressBar()

这基本上是 UI 界面的事情。为了在后台实际下载文件,你应该利用一个Service,它使用了一个AsyncTask (因为服务运行在 UI 线程 - 名称经常会误导)。你可以使用AsyncTask.publishProgress()将下载进度更新发送到 UI 线程,并在AsyncTask.onProgressUpdate()内更新进度条。


我已经按照上述方式操作了,但是如果我从“设置”->“应用程序”->“管理应用程序”->“我的应用程序”中点击“强制停止”,那么我的服务就会停止。这在Android市场下载中并没有发生。你能告诉我如何创建一个与Android市场相似的服务吗? - abbas.aniefa
@abbas 对于普通应用程序来说,这是不可能的。市场是一个系统级应用程序,具有特殊权限。出于安全考虑,普通应用程序不能做到这一点,用户必须能够随时停止此类应用程序,以防它们包含恶意软件。 - user658042

3
除了 @alextsc 的答案之外,如果您只支持API Level 9及以上版本,您可以使用 DownloadManager,它会为您处理所有细节,包括连接更改(例如WiFi->3G)。但是,这仅适用于Android 2.3+。

我必须使用API Level 7,但我会记在心里。谢谢! - hsz

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