使用DownloadManager下载未知数量的文件

时间:2015-11-18 11:08:14

标签: android broadcastreceiver android-service intentservice android-download-manager

我希望这个问题没问题。我有一些问题围绕如何解决这个问题:我想使用DownloadManager从Web服务器下载XML文件。 XML文件有一个info部分,其中包含数据库中的条目总数等。每个XML文件最多有1000个条目,条目总数可以是几千个,因此我需要动态启动新的下载会话,直到下载完所有内容。应用程序继续下载,解析数据并将其保存到应用程序SQLite数据库非常重要,即使应用程序未处于活动状态也是如此。

我试图通过以下方式解决这个问题:

  1. 创建DownloadIntentService类,扩展IntentService

  2. 让我的MainActivity类实现DownloadResultReceiver.Receiver,其中DownloadResultReceiver如下所示:

    public class DownloadResultReceiver extends ResultReceiver {
        private Receiver mReceiver;
    
        public DownloadResultReceiver(Handler handler) {
            super(handler);
        }
    
        public void setReceiver(Receiver receiver) {
            mReceiver = receiver;
        }
    
        public interface Receiver {
            public void onReceiveResult(int resultCode, Bundle resultData);
        }
    
        @Override
        protected void onReceiveResult(int resultCode, Bundle resultData) {
            if (mReceiver != null) {
                mReceiver.onReceiveResult(resultCode, resultData);
            }
        }
    }
    
  3. 在我的MainActivity类中,如果我的数据库没有填充,我会调用initServiceDownload():

    private void initServiceDownload(String sessionId, long offset)
    {
        /* Starting Download Service */
        mReceiver = new DownloadResultReceiver(new Handler());
        mReceiver.setReceiver(this);
    
        Intent intent = new Intent(DownloadManager.ACTION_DOWNLOAD_COMPLETE, null, this, DownloadIntentService.class);
    
        /* Send optional extras to Download IntentService */
        intent.putExtra("url", Client.getUrl(sessionId, offset));
        intent.putExtra("receiver", mReceiver);
        intent.putExtra("database", userDatabase);
        intent.putExtra("session", sessionId);
        intent.putExtra("offset", offset+"");
    
        startService(intent);
    }
    
  4. 在我的DownloadIntentService' onHandleIntent中,我尝试使用DownloadManager下载文件

  5. 在我的MainActivity中,我从DownloadResultReceiver覆盖onReceiveResult(),如果结果是DownloadIntentService.STATUS_FINISHED,我想解析文件,然后启动另一个DownloadManager会话,直到完成。唯一的问题是我从来没有进入这种方法。

  6. 我在这里走在正确的轨道上吗?此外,我应该在IntentService类中实现第二部分来解析数据,然后从那里开始另一个会话吗?

    我一直在谷歌搜索,试图找到最佳方法的信息,所以一些指针将是伟大的! : - )

0 个答案:

没有答案