【问题标题】:How to use built-in download manager on Android如何在 Android 上使用内置下载管理器
【发布时间】:2011-03-30 20:30:34
【问题描述】:

我想为安卓平台开发一个可以从我的服务器下载一些文件的应用程序。

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

对不起我的英语!

【问题讨论】:

    标签: android


    【解决方案1】:

    使用此类通过下载管理器下载任何文件

      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);
    
     }
    }
    

    【讨论】:

    • 对我有用,但我想要指示我的文件已下载的侦听器
    • 没有可用的监听器......但您可以使用广播管理器进行回调......因为有与下载完成相关的广播接收器。
    【解决方案2】:

    您也可以使用系统的DownloadManager

            DownloadManager mgr = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
    

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

    【讨论】:

    • 您在使用DownloadManager 时遇到过SQLiteException 吗?我在 1 台设备上遇到了这个错误,不知道为什么会发生。
    【解决方案3】:

    您的意思可能是内置于 Android 市场应用程序中。所以我想没有办法轻松地重用它,而是你必须自己构建一个类似的。 为此,您可能需要查看以下 SO 帖子:

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

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

    例如,如果“pathToFile”是 pdf 文档的 HTTP 地址,浏览器将自动开始下载,并显示在通知栏中,一旦下载完成,用户可以点击它并(如果根据应用程序已安装)文件将被打开。

    如果您需要在应用程序中进一步处理下载的文件,那么最好自己处理下载,打开 HTTP 连接等...

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 2014-07-30
      • 2011-08-18
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      相关资源
      最近更新 更多