File download not working in Android using cordova-2.9.0

前端 未结 1 1822
北荒
北荒 2020-12-18 12:30

I am working on a hybird application and it seems very straightforward way to download a pdf file from server using HTML5 anchor download attribute and this is working exact

相关标签:
1条回答
  • 2020-12-18 13:05

    This code is for Android platform. First, open the file [appname].java in your platform folder: appname\platforms\android\src\com\[appname]\app Next, set downloadListener for the webview, right after super.init();

    here is the complete code:

    
    
    package com.[appname].app;
    
    import android.os.Bundle;
    import org.apache.cordova.*;
    
    public class [appname] extends CordovaActivity 
    {
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            super.init();   
    
            super.appView.setDownloadListener(new android.webkit.DownloadListener() {
    
                public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
    
                    android.util.Log.d("Logger","url : " + url  + " userAgent: " + userAgent + " contentDisposition: " + contentDisposition + " mimeType: " + mimetype + " contentLength " + contentLength);                        
    
                    android.net.Uri source = android.net.Uri.parse(url);
    
                    // Make a new request
                    android.app.DownloadManager.Request request = new android.app.DownloadManager.Request(source);
    
                    // appears the same in Notification bar while downloading               
                    String filename = getFilename(contentDisposition);
    
                    request.setDescription("This file will be saved in your downloads folder.");
                    request.setTitle(filename);
    
                    //add cookie on request header (for authenticated web app)
                    String cookieContent = getCookieFromAppCookieManager(source.getHost());             
                    request.addRequestHeader("Cookie", cookieContent);
    
                    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
                        request.allowScanningByMediaScanner();
                        request.setNotificationVisibility(android.app.DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    }
    
                    // save the file in the "Downloads" folder of SDCARD
                    request.setDestinationInExternalPublicDir(android.os.Environment.DIRECTORY_DOWNLOADS, filename); 
    
                    // get download service and enqueue file
                    android.app.DownloadManager manager = (android.app.DownloadManager) getSystemService(android.content.Context.DOWNLOAD_SERVICE);
    
                    manager.enqueue(request);
                }
            });
    
            super.loadUrl(Config.getStartUrl());
            //super.loadUrl("file:///android_asset/www/index.html");
        };
    
        public String getFilename(String contentDisposition){
            String filename[] = contentDisposition.split("filename=");
            return filename[1].replace("filename=", "").replace("\"", "").trim();
        };
    
        public String getCookieFromAppCookieManager(String url){
            android.webkit.CookieManager cookieManager = android.webkit.CookieManager.getInstance();
            if (cookieManager == null)
                return null;
            String rawCookieHeader = null;
    
            // Extract Set-Cookie header value from Android app CookieManager for this URL
            rawCookieHeader = cookieManager.getCookie(url);
            if (rawCookieHeader == null)
                return null;
    
            return rawCookieHeader;
        };
    
    }
    
    
    
    0 讨论(0)
提交回复
热议问题