【问题标题】:Android Download Manager definitively completeAndroid 下载管理器最终完成
【发布时间】:2016-07-09 00:37:35
【问题描述】:

我成功创建了下载管理器和下载完成时下载管理器发送的广播意图操作:使用此Android download manager complete

但是,我使用下载管理器下载的不是 1 个文件,而是大约 5-10 个文件,并且这个意图:

registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

BroadcastReceiver onComplete=new BroadcastReceiver() {
public void onReceive(Context ctxt, Intent intent) {
    // your code
}

每次下载完成时开始。

下载完所有文件后,如何发送 Intent?

【问题讨论】:

  • 保留所有下载文件的列表。完成后标记(使用文件或数据库来执行此操作,因为您的应用程序可能会被杀死)。当没有标记为未完成的文件时,您已经下载了所有文件。一个 db 表将对此有好处。
  • 没有任何事件,与下载管理器相关联?我将其实现为自定义类,因此您的解决方案太复杂而无法实现
  • 使用 DownloadManager#query() 查看下载状态 (DownloadManager#STATUS_*)

标签: android android-studio android-download-manager


【解决方案1】:

为您的下载代码创建一个类,例如 MyDownloadManager,每次您需要下载一个新文件时,调用一个 MyDownloadManager 类的新实例。 Android 的默认 DownloadManager 会自动处理此问题并开始下载多个文件。

private void downloadFile(String url){
        MyDownloadManager downloadManager = new MyDownloadManager();
        downloadManager.DownloadFile(getApplicationContext(), url);
    }

您的 MyDownloadManager 类将如下所示:

public class MyDownloadManager{
private Context mContext;
private String url;

public void Download(Context context, String url){
    mContext = context;
    this.url = url;
    String serviceString = Context.DOWNLOAD_SERVICE;
    DownloadManager downloadManager;
    downloadManager = (DownloadManager)mContext.getSystemService(serviceString);    
    DownloadManager.Request request = new DownloadManager.Request(uri);
    long reference = downloadManager.enqueue(request);
}

public void RegisterDownloadManagerReciever(Context context) {
    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
                // Do something on download complete
            }
        }
    };
    context.registerReceiver(receiver, new IntentFilter(
            DownloadManager.ACTION_DOWNLOAD_COMPLETE));
    }
}

【讨论】:

  • 这个例子是一个简单的DownloadManager,每次下载完成时都会调用该事件。例如,如果我调用“downloadFile” 6 次,我就有 6 个事件
  • 下载管理器注册在 MyDownloadManager 类的最后一行。事件被触发 6 次是一件好事,因为这样您可以同时下载多个文件。
猜你喜欢
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 2012-05-20
  • 1970-01-01
相关资源
最近更新 更多