java - 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。如何允许下载管理器像在其他浏览器中一样同时下载所有这些。
解决方案
查看您是否使用下载管理器下载,然后我们可以一次下载一个文件,这实际上取决于设备。许多手机都有高级下载管理器,但有些手机有一个简单的管理器,可以一次下载一个文件。
所以解决方案就在这里,而不是调用下载管理器,我们可以使用这个代码来下载文件,它很棒并且总是可以正常工作。它同时下载所有文件。
这是代码:
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();
}
}
上面的代码会将文件下载到手机存储中,希望对某人有所帮助。