In this tutorial we will handle downloading files from WebView , we will also need Write_External_Storage permission to download files.
✓ Run-time Permission "WRITE_EXTERNAL_STORAGE" on devices >=Marshmallow.
✓ Download any file.
✓ Show download message/progress in notification.
✓ Show download message/progress in notification.
Step 1: Create a new project OR Open your project
Step 2: Code
AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.blogspot.devofandroid.myapplication"><!--add internet permission--><uses-permission android:name="android.permission.INTERNET"/><!--add WRITE_EXTERNAL_STORAGE permsission for downloading--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"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>
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"><WebViewandroid:id="@+id/web_view"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>
MainActivity.java
package com.blogspot.devofandroid.myapplication;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.support.v7.app.AppCompatActivity;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://drive.google.com/file/d/0B_rn9jkskDivX1dfZ3B3M2JVX2M/view?usp=drive_web";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//Runtime External storage permission for saving download filesif (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 downloadingwebView.setDownloadListener(new DownloadListener(){@Overridepublic 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();}});}}
0 Response to "Downloading File From Android Webview"