listview中的多个文件下载管理器+进度/暂停/恢复android

时间:2014-05-18 09:46:24

标签: android android-download-manager

我需要以这种形式为我的应用制作动态下载管理器:

  1. 添加新链接到当前列表
  2. 可以暂停和恢复下载
  3. 从自定义列表中删除完整下载

    喜欢这个pic:

  4. 首先我使用this site code进行线程下载。

    然后,我创建一个自定义列表视图,每次用户点击“下载”按钮时,都会添加该下载链接。

    但我有两个问题:

    1. 在向列表添加新链接后,所有列表都将是新的!
    2. ,以前未完成的下载将是新的,因为列表将是新的!
    3. 现在,问题是: 我如何为我的应用程序制作动态下载管理器,可以添加具有暂停/恢复功能的列表的新链接,并从自定义列表中删除下载的项目?


      修改 - 添加自定义列表视图

      此链接中的自定义列表视图:https://github.com/saeid-pm/Custom-Listview

4 个答案:

答案 0 :(得分:7)

最后大约1年后(:D)这是最好的解决方案之一:

使用this library添加到带库的项目

或Android Studio依赖项:

 dependencies {
    compile 'com.mani:ThinDownloadManager:1.3.0'
 }

它是最好的和快速(任何)文件下载库之一,太简单易用和自定义。

例如在我的问题中(1年前),i wanted to have Multiple-File-Download可以轻松指定线程池大小:

ThinDownloadManager downloadManager = new ThinDownloadManager(DOWNLOAD_THREAD_POOL_SIZE); 

//DOWNLOAD_THREAD_POOL_SIZE = number of threads.

古德勒克!

编辑以回答@Bhuvi,(设置目标下载文件)

  1. 定义文件目的地:

            String fileName ="file name";
            File root = android.os.Environment.getExternalStorageDirectory();
            File dir = new File(root.getAbsolutePath() +`subfolder name`);
    
            if (dir.exists() == false) {
                dir.mkdirs();
            }
    
            final Uri destinationUri = Uri.parse(dir + fileName);
    
  2. 然后是setDestinationURI

    ThinDownloadManager(您的路径)
    downloadRequest = 
      new DownloadRequest(downloadUri)setDestinationURI(destinationUri).setPriority(DownloadRequest.Priority.HIGH)
    
  3. 编辑@ farhad.kargaran回答 - 2017/12/06

    当我看到ThinDownloadManager存储库时,最后一个版本是1.3.0但是根据@ farhad.kargaran的回答,还有版本1.4.0,我还没有测试新版本的功能,但你可以根据@ farhad.kargaran的回答测试新版本。

答案 1 :(得分:0)

假设您没有自定义适配器并且您正在使用与该教程中提供的AndroidListClient.java类似的内容(此假设基于您对代码示例的文章的引用)。

所以,而不是:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list, initialList);
this.setListAdapter(adapter);

创建从Base Adapter扩展的自定义适配器。 (如果您已经有自定义适配器,请发布代码)。

在您的适配器中,使用viewHolder模式,并且不会在每次添加项目时对您的列表进行充气。

您可以在此处找到有关自定义适配器的更多信息 http://www.vogella.com/tutorials/AndroidListView/article.html#adapterown_example

答案 2 :(得分:0)

有同样的问题。这是我如何解决它(我不再有代码,所以我们必须到期): (我有一个数据库,因此管理下载相对简单。给了他们项目ID)

  1. 在您的AsyncTask中广播一个带有项目编号和过程完成的意图(onProgressUpdate)
  2. 在您的活动中实施LocalBoradcastReciever并使用新值更新ListView。
  3. 我完全不知道如何暂停/恢复下载。

    我使用静态变量取消下载(例如,如果(下载== 7)返回,则在读取服务器的字节时取消否7)。

    干杯!

答案 3 :(得分:0)

使用

dependencies {
compile 'com.mani:ThinDownloadManager:1.4.0'
}

但是在其github中它表示最后一个版本是1.3.0但实际上暂停和恢复功能是在1.4.0版本中并且github readMe不是最新的,请注意setDownloadResumable()中的以下代码

DownloadRequest downloadRequest = new DownloadRequest(downloadUri)
            .addCustomHeader("Auth-Token", "YourTokenApiKey")
            .setRetryPolicy(new DefaultRetryPolicy())
            .setDownloadResumable(true)

对于multipart,您应该在初始化下载管理器时执行以下代码:

int availableProcessors = getRuntime().availableProcessors();
downloadManager = new ThinDownloadManager(availableProcessors);