2016-09-04 10 views
8

私はCordovaアプリケーションでファイルをダウンロードしようとしていますが、これはFile transfer pluginを使用している小さなファイルでは問題ありませんが、大きなファイルの場合はアンドロイドダウンロードマネージャーを起動します。これは可能でしょうか(おそらくプラグインで)?トリガーアンドロイドダウンロードマネージャーCordova

リクエストのヘッダーを変更できる必要があるため、'cordova plugin background download' プラグインが私を助けませんでした。

編集:私はすでにAndroidダウンロードマネージャーを使用せずに、私の問題を修正しました。私のアプリが転送するファイルのほとんどは<であるので、DMを起動する50MBは絶対に必要ではありませんでした。この質問は、私のものではない賞金のために多くの注目を集めています。私はまだ良い答えが好きですが、私は答えをテストする時間がありません。

+0

これはあなたの要件に合致する1つのプラグインです - https://github.com/fastrde/cordova-plugin-fastrde-downloader – Gandhi

+0

プラグインをフォークし、ヘッダー機能を追加して元のプラグインができるようにしますそれの利益。 – jcesarmobile

+0

@DavidWesternこれに関する更新はありますか? – Gandhi

答えて

6

あなたの独自のプラグインを書くことが最良の方法です。 Cordovaプラグインを書くのは簡単で、公式の文書に従うだけで十分です。ダウンロードプロセスをカスタマイズする必要もあったため、同じことをしました。

一度あなた自身のプラグインを登録すると、次のコードで始めることができます:

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

     } 
+0

なぜプラグインをフォークして送信しないのですか?それをより良くするためのPR? – jcesarmobile

+0

'コードバプラグインのバックグラウンドダウンロード'はDownloadManagerを使用していませんでした(まだ使用していないことを確認しましたが、HttpURLConnectionを使用しています)。 DownloadManagerは、すぐに使える機能がたくさんあるので使いたいと思っていました。今はそこにいなかった多くのプラグインがあり、その多くはDMを使用しています。 https://github.com/sgrebnov/cordova-plugin-background-download。これについては、あなたが言ったことが意味をなさない。 「cordova plugin background download」はダウンロード用の「公式」Cordovaプラグインであり、何年も働く方法を変えないようにします。 – mommcilo

+0

質問には、「cordova plugin background download」というプラグインが、DMを使用するhttps://github.com/sgrebnov/cordova-plugin-background-downloadへリンクしています。これは、ヘッダーのサポートを追加するためのPRの送信について言及したものです。コアプラグインでDMを使用しないのは、ファイル転送プラグインです – jcesarmobile

1

これはあなたの要件に合っており、比較的アクティブなレディメイドdownloader pluginです。

はまた、これは、ファイルがダウンロードされ、通知が表示され、元のタスクに適している別のdownloadmanager pluginあるusageリンク

0

で述べたようにダウンロードするためのさまざまなオプションを提供します。

また、私はforkを作成し、ファイルがすでにダウンロードされていた場合に通知を発行する方法を追加しました。これは、ファイルがWeb API経由でダウンロードされ、ファイルを保存する前にサーバーからの応答を確認する必要がある場合に必要です。