如何在安卓设备上使用内置下载管理器

6

我希望开发一个能够从我的服务器下载一些文件的Android平台应用。

我该如何使用Android的下载管理器,就像在Android市场应用程序中使用的那样?我的意思是,当用户下载某些东西时,在通知栏中会显示下载状态。

非常抱歉我的英语不好!

3个回答

6
你所说的可能是内置在Android市场应用程序中的。所以我猜没有简单的方法来重复使用它,而你需要自己构建一个类似的。你可以查看以下SO帖子以达到这个目的:

根据你使用的文件类型,我发现从远程服务器下载文件最简单的方法是触发一个意图,如:

Intent downloadIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(pathToFile));

如果"pathToFile"是一个指向PDF文档的HTTP地址,浏览器会自动开始下载并在通知栏中显示下载进度。一旦下载完成,用户可以点击它并(如果有相应的应用程序安装)打开文件。
如果您需要在应用程序内进一步处理已下载的文件,则最好自己处理下载,打开HTTP连接等...

4
您可以使用系统的DownloadManager来完成此操作。
DownloadManager mgr = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);

将DownloadManager.Request发布到此服务会导致下载出现在通知区域。

你在使用DownloadManager时是否遇到过SQLiteException?我在一个设备上遇到了这个错误,但不知道为什么会发生。 - rminaj

2
使用此类下载任何文件,使用下载管理器。
  public class DLManager {
 @SuppressLint("NewApi")
 public static void useDownloadManager(String url, String name, Context c) {
  DownloadManager dm = (DownloadManager) c
    .getSystemService(Context.DOWNLOAD_SERVICE);
  DownloadManager.Request dlrequest = new DownloadManager.Request(
    Uri.parse(url));
  dlrequest
    .setAllowedNetworkTypes(
      DownloadManager.Request.NETWORK_WIFI
        | DownloadManager.Request.NETWORK_MOBILE)
    .setTitle("Title")
    .setDescription("Downloading in Progress..")
    .setDestinationInExternalPublicDir("Directory_name", name + ".jpg")
    .allowScanningByMediaScanner();

  dm.enqueue(dlrequest);

 }
}

对我来说这个可以工作,但我想要一个监听器来指示我的文件已经下载。 - Abhishek Singh
当前没有可用的监听器,但您可以使用广播管理器进行回调,因为与下载完成相关联的是广播接收器。 - Gagan

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