触发android下载管理器Cordova

时间:2016-09-04 09:00:46

标签: javascript android cordova download

我正在尝试使用Cordova应用程序下载文件,这对使用File transfer plugin的较小文件工作正常,但对于较大的文件,我想触发android下载管理器。这可能(可能带插件)吗?

我需要能够更改请求的标头,因此'cordova plugin background download' 插件没有帮助我。

修改:我已经修复了我的问题,没有使用Android下载管理器。由于我的应用程序将传输的大多数文件都是<触发DM的50mb并非绝对必要。由于不是我的赏金,这个问题引起了很多关注。虽然我仍然想要一个好的答案,但我没有太多时间来测试答案。

4 个答案:

答案 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)

您可以检查下一个插件。

它适用于Android和iPhone。

https://github.com/ogarzonm85/cordova-plugin-downloader.git