简体   繁体   English

使用cordova-2.9.0在Android下无法使用文件下载

[英]File download not working in Android using cordova-2.9.0

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 exactly as expected using below code on desktop browsers. 我正在开发一个hybird应用程序,使用HTML5锚点下载属性从服务器下载pdf文件似乎非常简单,这与桌面浏览器上使用下面的代码完全一致。

<a href="/path/sample.pdf" download="Test.pdf">Download</a>

Challange: But when I am trying to run same code in my Hybird application, using cordova 2.9.0 , when debugging app on mobile; Challange:但是当我试图在我的Hybird应用程序中运行相同的代码时,使用cordova 2.9.0,在移动设备上调试app时; on clicking of Download nothing shows up and download does not start. 点击下载没有显示和下载没有开始。

Am I missing something very basic here? 我错过了一些非常基本的东西吗?

Please suggest. 请建议。

This code is for Android platform. 此代码适用于Android平台。 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(); 首先,在你的平台文件夹中打开文件[appname].javaappname\\platforms\\android\\src\\com\\[appname]\\app接下来,在super.init();之后立即为webview设置downloadListener 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;
    };

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM