Android WebView With Downloading File

In this tutorial we will handle downloading files from WebView, The Android java code below can be used to download any type of files to your Android deviceÔÇÖs storage with the fileÔÇÖs original name, be it an .mp3, mp4,jpg or pdf, the code will download any file that is downloadable.

This code is for Android webview, just paste it below in the oncreate method of webview activity.

Remember that you need set the write to external storage permission in the manifest.

Run-time Permission “WRITE_EXTERNAL_STORAGE” on devices

>=Marshmallow.

Download any file.

Show download message/progress in notification.

Here is the android java code to download all types of files from Webview.

Step 1: Create a new project OR Open your project

Step 2: Code

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">
    <uses-permission  android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="CBLAMPPro"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.app.DownloadManager;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;

import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.DownloadListener;
import android.webkit.URLUtil;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    WebView webView;
    String url = "https://shyamoli.net/cblamppro/login/index.php";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //Runtime External storage permission for saving download files
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_DENIED) {
                Log.d("permission", "permission denied to WRITE_EXTERNAL_STORAGE - requesting it");
                String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
                requestPermissions(permissions, 1);
            }
        }


        webView = findViewById(R.id.web_view);
        webView.setWebViewClient(new WebViewClient());
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.loadUrl(url);

        //handle downloading
        webView.setDownloadListener(new DownloadListener()
        {
            @Override
            public void onDownloadStart(String url, String userAgent,
                                        String contentDisposition, String mimeType,
                                        long contentLength) {
                DownloadManager.Request request = new DownloadManager.Request(
                        Uri.parse(url));
                request.setMimeType(mimeType);
                String cookies = CookieManager.getInstance().getCookie(url);
                request.addRequestHeader("cookie", cookies);
                request.addRequestHeader("User-Agent", userAgent);
                request.setDescription("Downloading File...");
                request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType));
                request.allowScanningByMediaScanner();
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                request.setDestinationInExternalPublicDir(
                        Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(
                                url, contentDisposition, mimeType));
                DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                dm.enqueue(request);
                Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show();
            }});

    }
    @Override
    public void onBackPressed(){
        WebView wv = (WebView)findViewById(R.id.web_view);
        if(wv.canGoBack()){
            wv.goBack();
        } else {
            super.onBackPressed();
        }
    }

}
Hey folks, I'm Vivek Kumar Pandey, a software engineer with a passion for crafting elegant solutions to complex problems. From the bustling streets of Mumbai to the heart of Bangalore's tech scene, I've journeyed through the world of programming, leaving my mark one line of code at a time. Join me as I continue to explore, innovate, and push the boundaries of what's possible in the digital realm.

Related Posts

Secure File Transfer with Java: A Guide to SFTP

In today’s interconnected digital landscape, the need to securely transfer files between systems is ubiquitous. One of the most reliable and secure protocols for such transfers is…

Mastering Cron Expressions: A Comprehensive Guide

Cron expressions are a powerful tool that enables automation and task scheduling on Unix-like operating systems. Whether you’re a systems administrator, a developer, or simply someone interested…

This Post Has 3 Comments

  1. Автор 24 – это надежный сервис для приобретения разнообразных академических работ. Он занимается на дипломных работах, а также расчетах. Кроме того, на сервисе Автор 24 можно заказать очерки, отчеты о прохождении практики. Это эффективный способ получить профессиональную помощь.
    Автор 24 официальный Автор 24 ру .

  2. Купить диплом с доставкой до дома, онлайн.
    Доступные цены на дипломы для продажи, подробности здесь.
    Заказать официальный документ о образовании, важная информация.
    Опыт успешной покупки диплома, рассказываем.
    Купить диплом легко, с гарантией.
    Как выбрать диплом для покупки, интересные варианты.
    Купить диплом срочно и недорого, подробности на сайте.
    Почему стоит купить диплом, важная информация.
    Лучшие дипломы для покупки, подробности на сайте.
    Покупка диплома: безопасность и качество, лучшие условия.
    Официальные документы для покупки, срочные варианты.
    Безопасное приобретение документов об образовании, подробности на сайте.
    Почему стоит заказать диплом, важные детали.
    Купить диплом просто, важные моменты.
    Купить диплом без риска, безопасность на первом месте.
    Какой диплом выбрать для покупки, интересные варианты.
    Официальная покупка диплома, важные детали.
    Как купить диплом безопасно и быстро, гарантированный результат.
    купить диплом http://7arusak-diploms.com/ .

Leave a Reply

Your email address will not be published. Required fields are marked *