WebViewActivity.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package com.norman.webviewup.demo;
  2. import android.Manifest;
  3. import android.annotation.SuppressLint;
  4. import android.app.Activity;
  5. import android.app.AlertDialog;
  6. import android.app.DownloadManager;
  7. import android.content.Context;
  8. import android.graphics.Bitmap;
  9. import android.net.Uri;
  10. import android.os.Build;
  11. import android.os.Bundle;
  12. import android.os.Environment;
  13. import android.util.Log;
  14. import android.webkit.CookieManager;
  15. import android.webkit.URLUtil;
  16. import android.webkit.WebSettings;
  17. import android.webkit.WebView;
  18. import android.webkit.WebViewClient;
  19. import android.widget.Toast;
  20. import androidx.annotation.RequiresApi;
  21. import androidx.core.app.ActivityCompat;
  22. public class WebViewActivity extends Activity {
  23. private final int STORAGE_PERMISSION_CODE = 1;
  24. private WebView mWebView;
  25. private void requestStoragePermission() {
  26. if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
  27. new AlertDialog.Builder(this)
  28. .setTitle("Permission needed")
  29. .setMessage("This permission is needed to download files")
  30. .setPositiveButton("ok", (dialog, which) -> ActivityCompat.requestPermissions(WebViewActivity.this,
  31. new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE))
  32. .setNegativeButton("cancel", (dialog, which) -> dialog.dismiss())
  33. .create().show();
  34. } else {
  35. ActivityCompat.requestPermissions(this,
  36. new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
  37. }
  38. }
  39. @RequiresApi(api = Build.VERSION_CODES.Q)
  40. @Override
  41. @SuppressLint("SetJavaScriptEnabled")
  42. protected void onCreate(Bundle savedInstanceState) {
  43. requestStoragePermission();
  44. super.onCreate(savedInstanceState);
  45. setContentView(R.layout.activity_webview);
  46. mWebView = findViewById(R.id.webview);
  47. // mWebView.setWebViewRenderProcessClient();
  48. // mWebView.getWebViewLooper()
  49. WebSettings webSettings = mWebView.getSettings();
  50. String userAgentString = webSettings.getUserAgentString();
  51. Log.v("webview", "userAgentString" + userAgentString);
  52. webSettings.setJavaScriptEnabled(true);
  53. mWebView.setWebViewClient(new HelloWebViewClient());
  54. mWebView.setDownloadListener((url, userAgent, contentDisposition, mimeType, contentLength) -> {
  55. Uri source = Uri.parse(url);
  56. DownloadManager.Request request = new DownloadManager.Request(source);
  57. String cookies = CookieManager.getInstance().getCookie(url);
  58. request.addRequestHeader("cookie", cookies);
  59. request.addRequestHeader("User-Agent", userAgent);
  60. request.setDescription("Downloading File...");
  61. request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType));
  62. request.allowScanningByMediaScanner();
  63. request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
  64. request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, contentDisposition, mimeType));
  65. DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
  66. dm.enqueue(request);
  67. Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show();
  68. });
  69. mWebView.loadUrl("https://test-videos.co.uk/bigbuckbunny/mp4-h265"); //Replace The Link Here
  70. }
  71. private static class HelloWebViewClient extends WebViewClient {
  72. @Override
  73. public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
  74. // view.loadUrl(url);
  75. return false;
  76. }
  77. @Override
  78. public void onPageStarted(WebView view, String url, Bitmap favicon) {
  79. super.onPageStarted(view, url, favicon);
  80. }
  81. @Override
  82. public void onPageFinished(WebView view, String url) {
  83. super.onPageFinished(view, url);
  84. }
  85. }
  86. @Override
  87. public void onBackPressed() {
  88. if (mWebView.canGoBack()) {
  89. mWebView.goBack();
  90. } else {
  91. super.onBackPressed();
  92. }
  93. }
  94. }