Android 下载管理器多重下载链接

Android Download Manager multiple downloading for links

我创建了一个录音应用,用户可以上传数据到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);
            
        }

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

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

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

代码如下:


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

以上代码将下载phone存储中的文件,希望对大家有所帮助。