2016-09-04 20 views
8

Tôi đang cố gắng tải xuống các tệp bằng ứng dụng Cordova, điều này hoạt động tốt đối với các tệp nhỏ hơn bằng cách sử dụng File transfer plugin, nhưng đối với tệp lớn hơn, tôi muốn kích hoạt trình quản lý tải xuống Android. Điều này có thể (có thể với một plugin)?Trình quản lý tải xuống cho Android android Cordova

Tôi cần có thể thay đổi tiêu đề của yêu cầu, vì vậy, plugin 'cordova plugin background download' không giúp ích gì cho tôi.

Chỉnh sửa: Tôi đã khắc phục sự cố của mình mà không cần sử dụng trình quản lý Tải xuống Android. Vì hầu hết các tệp mà ứng dụng của tôi sẽ chuyển là < 50mb kích hoạt DM không thực sự cần thiết. Câu hỏi này đã nhận được rất nhiều sự chú ý vì một tiền thưởng không phải của tôi. Mặc dù tôi vẫn thích một câu trả lời hay nhưng tôi không có nhiều thời gian để kiểm tra câu trả lời.

+0

Đây là một plugin phù hợp với yêu cầu của bạn và hoạt động tích cực - https://github.com/fastrde/cordova-plugin-fastrde-downloader – Gandhi

+0

ngã ba plugin, thêm khả năng tiêu đề và gửi PR để plugin gốc có thể lợi ích của nó. – jcesarmobile

+0

@DavidWestern Mọi cập nhật về điều này? – Gandhi

Trả lời

6

Cách tốt nhất để thực hiện là viết plugin của riêng bạn. Việc viết các plugin Cordova thật dễ dàng và chỉ cần làm theo tài liệu chính thức là đủ. Chúng tôi cũng làm như vậy vì cũng cần phải tùy chỉnh quá trình tải xuống. Có vẻ như một cuộc gọi bản địa sử dụng phương pháp này, bởi vì nó kích hoạt DM gốc để người dùng có thể xem tiến trình, hủy bỏ, tạm dừng, vv ..

Và một khi bạn đăng ký plugin của mình, đây là mã bạn có thể sử dụng để bắt đầu:

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

lý do tại sao không chia nhỏ plugin mà anh ấy đề cập và gửi một PR để làm cho nó tốt hơn? – jcesarmobile

+0

'tải xuống nền cordova plugin' không được sử dụng DownloadManager (Tôi đã kiểm tra chúng vẫn không sử dụng nó, chúng sử dụng HttpURLConnection). Và chúng tôi muốn sử dụng DownloadManager vì nó có rất nhiều tính năng ngoài hộp. Bây giờ có rất nhiều bổ sung mà không có trước đó, và rất nhiều trong số họ đang sử dụng DM ví dụ. https://github.com/sgrebnov/cordova-plugin-background-download. Đối với điều này nó làm cho cảm giác những gì bạn nói. 'tải xuống nền plugin cordova' là "Cordova plugin" chính thức để tải xuống và họ chắc chắn sẽ không thay đổi cách thức hoạt động của nó trong nhiều năm. – mommcilo

+0

Trong câu hỏi, plugin được gọi là liên kết 'tải xuống nền plugin cordova' tới https://github.com/sgrebnov/cordova-plugin-background-download, sử dụng DM. Đó là một trong những tôi đã đề cập đến về việc gửi một PR để thêm hỗ trợ tiêu đề. Một trong đó là một plugin cốt lõi và không sử dụng DM là plugin chuyển tập tin – jcesarmobile

1

Đây là một readymade downloader plugin phù hợp với yêu cầu của bạn và hoạt động tích cực.

Nó cũng cung cấp tùy chọn khác nhau để tải về như đã đề cập trong usage liên kết

0

Đây là một downloadmanager plugin trong đó cho thấy một thông báo khi các tập tin được tải về và phù hợp với nhiệm vụ ban đầu.

Ngoài ra tôi đã thực hiện một fork và thêm một phương thức để nâng cao thông báo nếu tệp đã được tải xuống trước đó. Điều này là cần thiết khi tệp được tải xuống qua api web và bạn cần kiểm tra phản hồi từ máy chủ trước khi lưu tệp.

Các vấn đề liên quan