How to enable download in webview in Sketchware apps?

How to enable download in an app created with Sketchware?

Suppose you have created an app in Sketchware which uses webview to open a site. You can seamlessly explore the site in your app. But the download links in the webview field do not work.

But it is possible to make it work by exporting the source code. You can edit the code in either Android studio or Eclipse to add your desired features and then recompile it. I tried to do that but soon realized that setting up environment for development of Android app is not easy for a naive like me. But it can be done by code injection or by using another mobile app called Anacode.

Enabling download from webview in Sketchware using add source directly block.

1. In VIEW area of your app insert a WebView (webview1).

2. In LOGIC area, in onCreate event, add an add source directly block. In this block add the following code:
webview1.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity (intent);
}
});

3. After this add webview loadUrl block and write the url you intend to load in webview.



Adding​ code using Anacode App.

You need two apps to do this: Sketchware and Anacode.

Step 1
Start a New project in Sketchware (e.g. package name com.abc). Insert webview in your View field and set webview to load your URL.

Step 2
Now save the project, run and install it. Then export source code and save it on your mobile.

Step 3
The exported source code is in a zip file. When it is decompressed following folders are seen:

* app
      /src
          /main
                /java
                     /com/abc/MainActivity.java
                                     /....java
                /res
                     /drawable/
                     /drawable-xhdpi/
                     /layout/main.xml
                     /raw/
                     /values/
                     /values-v21/
                /AndroidManifest.xml

      /build.gradle
* build.gradle
* settings.gradle

(files and folders in red are to be copied)

Step 4
Now open Anacode and start a new Android project. (e.g. project name: newproject, and package name: com.abc, created in root folder)

Note: Package name should be same as the package name in your Sketchware project.

Step 5
You'll see newprojectActivity.java open in Anacode. Now close Anacode and browse your file manager to find the folder with your project name. The folder may look as shown below:

*newproject
      /assets/
      /bin/
      /gen/
      /libs/
      /res/
      /src/com/abc/newprojectActivity.java
      /AndroidManifest.xml
      /proguard.cfg

(files and folders in red are to be replaced with corresponding files and folders in Sketchware project, or to be deleted)

Step 6
Now go to decompressed folder of your Sketchware project and copy 'AndroidManifest.xml' and 'res' folder and paste it in your Anacode project folder such that it replaces all files with similar names.

Step 7
Copy 'MainActivity.java' and all other Java files in that folder in Sketchware project and paste them in the same folder as newprojectActivity.java. Now delete
'newprojectActivity.java'.

Step 8
Start Anacode, open MainActivity.java and copy the following code after webview loadUrl in onCreate method:


webview1.setDownloadListener(new DownloadListener() {
        public void onDownloadStart(String url, String userAgent,
                String contentDisposition, String mimetype,
                long contentLength) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);
        }
    });



(Note: 'webview1' is name of the webview and it should be same as the name of webview in Sketchware project.)

Step 9
Save it and run the project. Your app can now open download links from webview field in Google chrome or any other browser in your mobile.


Enable download without code Injection
To enable download in Sketchware without using any code or without using Anacode app, visit this page:
http://www.sketchwarehelp.com/2017/08/enable-download-from-webview-in.html


For how to enable upload from webview in Sketchware, visit the link below:
http://www.sketchwarehelp.com/2017/10/how-to-enable-upload-from-webview-in.html