【问题标题】:Android Download Manager multiple downloading for linksAndroid下载管理器多次下载链接
【发布时间】:2020-09-21 13:35:29
【问题描述】:

我创建了一个录制应用程序,用户可以将数据上传到 google firebase 也可以恢复数据。就是这样,这就是我的应用程序所做的一切。现在我用 600 个文件(mp3 文件)测试了我的恢复过程,然后我看到当我调用下载管理器时,文件开始下载,但它们一次下载一个,这使得该过程非常耗时。那么有没有办法让下载管理器同时下载所有文件。

void startDownloading(String DownloadUrl, String DownloadPath, String DownloadName) {

                DownloadManager.Request request = new DownloadManager.Request(Uri.parse(DownloadUrl));
                request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
                request.setTitle("Data");
                request.setDescription("Journals");
                request.allowScanningByMediaScanner();
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
                request.setDestinationInExternalPublicDir(DownloadPath, DownloadName);
                DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                manager.enqueue(request);
            
        }

所以我通过将文件的链接、路径和名称发送到上述方法来下载文件,然后将任务添加到 Android 设备中的 DownloadManager。 如何让下载管理器像我们在其他浏览器中一样同时下载所有这些。

【问题讨论】:

  • 你不能改变这个行为,你必须实现你自己的下载管理器

标签: java android android-download-manager


【解决方案1】:

查看您是否使用下载管理器下载,然后我们可以一次下载一个文件,这实际上取决于设备。许多手机都有高级下载管理器,但有些手机有一个简单的管理器,可以一次下载一个文件。

所以解决方案就在这里,而不是调用下载管理器,我们可以使用此代码来下载文件,它很棒而且总是可以正常工作。它同时下载所有文件。

代码如下:


void startDownloading
(final String DownloadUrl, String DownloadPath, String DownloadName) {

            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);

            final File file = new File(StringManager.phoneStorageLocation + "/"
                    + DownloadPath + "/" + DownloadName);

            if (file.exists()) { // decide what to do

            } else {

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            URL url = new URL(DownloadUrl);
                            ReadableByteChannel rbc = Channels.newChannel(url.openStream());
                            FileOutputStream fos = new FileOutputStream(file);
                            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
                            fos.close();
                            rbc.close();

                        } catch (IOException ignored) {
                        }
                    }
                }).start();
            }
        }

以上代码会将文件下载到手机存储中,希望对大家有所帮助。

【讨论】:

  • 你怎么知道一个特定的下载完成了?还是全部下载完成?
  • 查看上面的链接,我现在不使用这种方法。我所做的是使用线程然后 chevk therad.isalive 运行下载。如果为假,则下载完成。它适用于小文件。顺便说一下,github上有很多库。祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
相关资源
最近更新 更多