首页 > 解决方案 > Android下载管理器多次下载链接

问题描述

我创建了一个录制应用程序,用户可以将数据上传到 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。如何允许下载管理器像在其他浏览器中一样同时下载所有这些。

标签: javaandroidandroid-download-manager

解决方案


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

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

这是代码:


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

上面的代码会将文件下载到手机存储中,希望对某人有所帮助。


推荐阅读