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存储中的文件,希望对大家有所帮助。
我创建了一个录音应用,用户可以上传数据到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存储中的文件,希望对大家有所帮助。