我正在尝试使用Cordova应用程序下载文件,这对使用File transfer plugin的较小文件工作正常,但对于较大的文件,我想触发android下载管理器。这可能(可能带插件)吗?
我需要能够更改请求的标头,因此'cordova plugin background download' 插件没有帮助我。
修改:我已经修复了我的问题,没有使用Android下载管理器。由于我的应用程序将传输的大多数文件都是<触发DM的50mb并非绝对必要。由于不是我的赏金,这个问题引起了很多关注。虽然我仍然想要一个好的答案,但我没有太多时间来测试答案。
答案 0 :(得分:6)
最好的方法是编写自己的插件。编写Cordova插件很简单,只需遵循官方文档即可。我们做了同样的事情,因为还有必要定制下载过程。它看起来像使用此方法的本机调用,因为它激活本机DM,因此用户可以看到进度,取消它,暂停等。
一旦你注册了自己的插件,这就是你可以用来开始的代码:
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
public class DownloadPlugin extends CordovaPlugin{
private DownloadManager downloadManager;
public DownloadPlugin() {
downloadManager = (DownloadManager) webView.getContext()
.getSystemService(webView.getContext().DOWNLOAD_SERVICE);
}
@Override
public boolean execute(String action, JSONArray args,
CallbackContext callbackContext) throws JSONException {
String downloadUrl = args.getString(0);
startDownloadForUrl(String downloadUrl);
}
public void startDownloadForUrl(String downloadUrl){
Request downloadRequest = new Request(downloadUrl);
if (accessToken != null) { // we use oauth so this is example of changing download request
downloadRequest.addRequestHeader("Authorization", "Bearer "
+ accessToken);
}
downloadRequest
.setDescription("description")
.setDestinationInExternalFilesDir("folderName", "fileName");
downloadManager.enqueue(downloadRequest);
}
}
答案 1 :(得分:1)
这是一个现成的downloader plugin,符合您的要求并且具有比较活跃性。
它还提供了usage链接
中提到的各种下载选项答案 2 :(得分:0)
这是另一个downloadmanager plugin,它在下载文件时显示通知并且适合原始任务。
我还制作了一个fork并添加了一个方法来提示通知,如果该文件之前已经下载过。当通过web api下载文件时,这是必要的,您需要在保存文件之前检查服务器的响应。
答案 3 :(得分:0)