4

I have an android app with a webview.

Whenever a user clicks on a button, JavaScript creates a blob, puts text in it and downloads it.

Here's the function that does this:

function saveTextAsFile(A)
{
    FillTextToWrite(A);
    var textFileAsBlob = new Blob([textToWrite], {
        type: 'text/plain'
    });
    var downloadLink = document.createElement("a");
    downloadLink.download = "Analysis.txt";
    downloadLink.innerHTML = "Download File";
    if (window.webkitURL != null)
    {
        downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
    }
    else
    {
        downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
        downloadLink.onclick = destroyClickedElement;
        downloadLink.style.display = "none";
        document.body.appendChild(downloadLink);
    }

    downloadLink.click();
}

It works fine in any browser, but when I try to download it in the app, nothing happens.

Is there a way to download the blob in the app or is it easier to change the JavaScript?

I need the JavaScript to work on browser as well as on the android app, so sending the blob to the android app in JavaScript will not work on browser.

Laura
  • 149
  • 2
  • 15
  • Maybe this question/answers will help. http://stackoverflow.com/questions/33434532/android-webview-download-files-like-browsers-do – bobjoe Jan 11 '17 at 14:40
  • 1
    @bobjoe Thank you for your answer, but it is solved. I forgot about this question but I will answer my solution. – Laura Jan 11 '17 at 14:43

1 Answers1

1

The solution I found was to detect wheter the javascript is running in Android app or in browser (by adding a string to the user agent).

When in Android app I am sending variable textToWrite (which would normally go into the blob) to the java.

In javascript:

if(App){
    Android.sendData(textToWrite);
} else {//make blob}

In java:

myWebView.addJavascriptInterface(new myJavascriptInterface(this), "Android");

public class myJavascriptInterface {
    Context mContext;

    myJavascriptInterface(Context c) {
        mContext = c;
    }

    @JavascriptInterface
    public void sendData(String data) {
        //save data as file
    }
}
Laura
  • 149
  • 2
  • 15