From d771ceb44342995fd575037f963542eedb067b61 Mon Sep 17 00:00:00 2001 From: alzemand Date: Tue, 17 Sep 2024 20:21:33 -0300 Subject: [PATCH 1/7] =?UTF-8?q?ajustes=20para=20que=20a=20webview=20n?= =?UTF-8?q?=C3=A3o=20mande=20para=20o=20navegador?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/app/MainActivity.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/example/app/MainActivity.java b/app/src/main/java/com/example/app/MainActivity.java index 2ac45b1..fa45fe6 100755 --- a/app/src/main/java/com/example/app/MainActivity.java +++ b/app/src/main/java/com/example/app/MainActivity.java @@ -5,6 +5,7 @@ import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; +import android.webkit.WebViewClient; public class MainActivity extends Activity { @@ -18,10 +19,12 @@ protected void onCreate(Bundle savedInstanceState) { mWebView = findViewById(R.id.activity_main_webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); + + // Definindo o WebViewClient para garantir que os links sejam abertos na WebView mWebView.setWebViewClient(new MyWebViewClient()); // REMOTE RESOURCE - // mWebView.loadUrl("https://example.com"); + mWebView.loadUrl("https://rumos.codexti.com/login"); // LOCAL RESOURCE // mWebView.loadUrl("file:///android_asset/index.html"); @@ -29,10 +32,19 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void onBackPressed() { - if(mWebView.canGoBack()) { + if (mWebView.canGoBack()) { mWebView.goBack(); } else { super.onBackPressed(); } } + + private class MyWebViewClient extends WebViewClient { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + // Sempre carregar os links dentro da WebView + view.loadUrl(url); + return true; // Indica que o WebView está lidando com o URL + } + } } From de7a2ddfc2c1a554d7ab24317e4c8011948b28af Mon Sep 17 00:00:00 2001 From: alzemand Date: Tue, 17 Sep 2024 23:22:09 -0300 Subject: [PATCH 2/7] =?UTF-8?q?Ajuste=20na=20webview=20para=20fixar=20a=20?= =?UTF-8?q?navega=C3=A7=C3=A3o=20no=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/app/MainActivity.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/example/app/MainActivity.java b/app/src/main/java/com/example/app/MainActivity.java index fa45fe6..f66f513 100755 --- a/app/src/main/java/com/example/app/MainActivity.java +++ b/app/src/main/java/com/example/app/MainActivity.java @@ -17,17 +17,27 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = findViewById(R.id.activity_main_webview); + WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); + webSettings.setLoadWithOverviewMode(true); + webSettings.setUseWideViewPort(true); + webSettings.setBuiltInZoomControls(true); + webSettings.setDisplayZoomControls(false); + webSettings.setDomStorageEnabled(true); + webSettings.setAppCacheEnabled(true); + webSettings.setDatabaseEnabled(true); + webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); // Definindo o WebViewClient para garantir que os links sejam abertos na WebView mWebView.setWebViewClient(new MyWebViewClient()); // REMOTE RESOURCE - mWebView.loadUrl("https://rumos.codexti.com/login"); + mWebView.loadUrl("https://example.com"); // LOCAL RESOURCE - // mWebView.loadUrl("file:///android_asset/index.html"); + mWebView.loadUrl("file:///android_asset/index.html"); + } @Override @@ -42,9 +52,8 @@ public void onBackPressed() { private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - // Sempre carregar os links dentro da WebView view.loadUrl(url); - return true; // Indica que o WebView está lidando com o URL + return true; } } } From 52725cf184271d4f47e8f764fee288634c3deff6 Mon Sep 17 00:00:00 2001 From: Edilson Alzemand Sigmaringa Junior Date: Tue, 17 Sep 2024 23:27:25 -0300 Subject: [PATCH 3/7] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d60c6f9..1c819a6 100755 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This is a template project for Android Studio that allows you to create an andro If you want to create an app that shows the content of a remote website -1. uncomment line **24** in `MainActivity.java` and replace `https://example.com` with your url +1. uncomment line **36** in `MainActivity.java` and replace `https://example.com` with your url ```java mWebView.loadUrl("https://example.com"); @@ -24,7 +24,7 @@ If you want to create an app that shows the content of a remote website If you want to create a local HTML5 android app -1. uncomment line **27** in `MainActivity.java` +1. uncomment line **39** in `MainActivity.java` ```java mWebView.loadUrl("file:///android_asset/index.html"); From 7826a006b55035f5998398dfacd153fd39364698 Mon Sep 17 00:00:00 2001 From: alzemand Date: Fri, 20 Sep 2024 22:09:33 -0300 Subject: [PATCH 4/7] habilitar download --- .../main/java/com/example/app/MainActivity.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/src/main/java/com/example/app/MainActivity.java b/app/src/main/java/com/example/app/MainActivity.java index f66f513..e876799 100755 --- a/app/src/main/java/com/example/app/MainActivity.java +++ b/app/src/main/java/com/example/app/MainActivity.java @@ -2,10 +2,14 @@ import android.annotation.SuppressLint; import android.app.Activity; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; +import android.webkit.DownloadListener; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; +import android.widget.Toast; public class MainActivity extends Activity { @@ -32,6 +36,18 @@ protected void onCreate(Bundle savedInstanceState) { // Definindo o WebViewClient para garantir que os links sejam abertos na WebView mWebView.setWebViewClient(new MyWebViewClient()); + // Habilitando o download de arquivos + mWebView.setDownloadListener(new DownloadListener() { + @Override + public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) { + // Criando uma Intent para baixar o arquivo + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(url)); + startActivity(intent); + Toast.makeText(MainActivity.this, "Iniciando o download...", Toast.LENGTH_SHORT).show(); + } + }); + // REMOTE RESOURCE mWebView.loadUrl("https://example.com"); From abf4b236d92dacfb3c5c906833dda0ad804e1946 Mon Sep 17 00:00:00 2001 From: alzemand Date: Fri, 20 Sep 2024 22:40:08 -0300 Subject: [PATCH 5/7] =?UTF-8?q?habilitar=20download=20de=20conte=C3=BAdo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/app/MainActivity.java | 46 +++++++++++++++++-- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/example/app/MainActivity.java b/app/src/main/java/com/example/app/MainActivity.java index e876799..b80c0be 100755 --- a/app/src/main/java/com/example/app/MainActivity.java +++ b/app/src/main/java/com/example/app/MainActivity.java @@ -5,15 +5,19 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; import android.webkit.DownloadListener; +import android.widget.Toast; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; -import android.widget.Toast; public class MainActivity extends Activity { private WebView mWebView; + private ValueCallback mFilePathCallback; + private final static int FILECHOOSER_RESULTCODE = 1; @Override @SuppressLint("SetJavaScriptEnabled") @@ -36,6 +40,26 @@ protected void onCreate(Bundle savedInstanceState) { // Definindo o WebViewClient para garantir que os links sejam abertos na WebView mWebView.setWebViewClient(new MyWebViewClient()); + // Definindo o WebChromeClient para lidar com uploads de arquivos + mWebView.setWebChromeClient(new WebChromeClient() { + // For Android 5.0+ + @Override + public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) { + if (mFilePathCallback != null) { + mFilePathCallback.onReceiveValue(null); + } + mFilePathCallback = filePathCallback; + Intent intent = fileChooserParams.createIntent(); + try { + startActivityForResult(intent, FILECHOOSER_RESULTCODE); + } catch (Exception e) { + mFilePathCallback = null; + return false; + } + return true; + } + }); + // Habilitando o download de arquivos mWebView.setDownloadListener(new DownloadListener() { @Override @@ -57,11 +81,23 @@ public void onDownloadStart(String url, String userAgent, String contentDisposit } @Override - public void onBackPressed() { - if (mWebView.canGoBack()) { - mWebView.goBack(); + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == FILECHOOSER_RESULTCODE) { + if (mFilePathCallback != null) { + Uri[] results = null; + if (resultCode == Activity.RESULT_OK) { + if (data != null) { + String dataString = data.getDataString(); + if (dataString != null) { + results = new Uri[]{Uri.parse(dataString)}; + } + } + } + mFilePathCallback.onReceiveValue(results); + mFilePathCallback = null; + } } else { - super.onBackPressed(); + super.onActivityResult(requestCode, resultCode, data); } } From e38beb19c23acfa3d0560aa331f926a41cfd233b Mon Sep 17 00:00:00 2001 From: alzemand Date: Sat, 21 Sep 2024 00:19:49 -0300 Subject: [PATCH 6/7] add back function --- app/src/main/java/com/example/app/MainActivity.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/src/main/java/com/example/app/MainActivity.java b/app/src/main/java/com/example/app/MainActivity.java index b80c0be..b20cf91 100755 --- a/app/src/main/java/com/example/app/MainActivity.java +++ b/app/src/main/java/com/example/app/MainActivity.java @@ -19,6 +19,17 @@ public class MainActivity extends Activity { private ValueCallback mFilePathCallback; private final static int FILECHOOSER_RESULTCODE = 1; + @Override + public void onBackPressed() { + if (mWebView.canGoBack()) { + // Se houver páginas no histórico, voltar para a página anterior + mWebView.goBack(); + } else { + // Se não houver, comportar-se como o botão "voltar" padrão do Android + super.onBackPressed(); + } + } + @Override @SuppressLint("SetJavaScriptEnabled") protected void onCreate(Bundle savedInstanceState) { From 8efb22a13a0fe930e9f78aa3320ce68dbdc84630 Mon Sep 17 00:00:00 2001 From: alzemand Date: Wed, 25 Sep 2024 23:22:44 -0300 Subject: [PATCH 7/7] download link ajuste --- README.md | 4 +- .../java/com/example/app/MainActivity.java | 62 +++++++++++++------ 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 1c819a6..2d0772f 100755 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This is a template project for Android Studio that allows you to create an andro If you want to create an app that shows the content of a remote website -1. uncomment line **36** in `MainActivity.java` and replace `https://example.com` with your url +1. uncomment line **80** in `MainActivity.java` and replace `https://example.com` with your url ```java mWebView.loadUrl("https://example.com"); @@ -24,7 +24,7 @@ If you want to create an app that shows the content of a remote website If you want to create a local HTML5 android app -1. uncomment line **39** in `MainActivity.java` +1. uncomment line **83** in `MainActivity.java` ```java mWebView.loadUrl("file:///android_asset/index.html"); diff --git a/app/src/main/java/com/example/app/MainActivity.java b/app/src/main/java/com/example/app/MainActivity.java index b20cf91..1111770 100755 --- a/app/src/main/java/com/example/app/MainActivity.java +++ b/app/src/main/java/com/example/app/MainActivity.java @@ -2,15 +2,20 @@ import android.annotation.SuppressLint; import android.app.Activity; +import android.app.AlertDialog; +import android.app.DownloadManager; +import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.os.Environment; +import android.webkit.CookieManager; +import android.webkit.URLUtil; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; -import android.webkit.DownloadListener; -import android.widget.Toast; import android.webkit.WebSettings; import android.webkit.WebView; +import android.widget.Toast; import android.webkit.WebViewClient; public class MainActivity extends Activity { @@ -53,7 +58,7 @@ protected void onCreate(Bundle savedInstanceState) { // Definindo o WebChromeClient para lidar com uploads de arquivos mWebView.setWebChromeClient(new WebChromeClient() { - // For Android 5.0+ + // Para Android 5.0+ @Override public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) { if (mFilePathCallback != null) { @@ -71,24 +76,11 @@ public boolean onShowFileChooser(WebView webView, ValueCallback filePathC } }); - // Habilitando o download de arquivos - mWebView.setDownloadListener(new DownloadListener() { - @Override - public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) { - // Criando uma Intent para baixar o arquivo - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(url)); - startActivity(intent); - Toast.makeText(MainActivity.this, "Iniciando o download...", Toast.LENGTH_SHORT).show(); - } - }); - // REMOTE RESOURCE mWebView.loadUrl("https://example.com"); // LOCAL RESOURCE mWebView.loadUrl("file:///android_asset/index.html"); - } @Override @@ -115,8 +107,42 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - view.loadUrl(url); - return true; + // Se o URL for um arquivo de download, tratar manualmente o download + if (url.endsWith(".pdf") || url.endsWith(".zip") || url.endsWith(".doc") || url.endsWith(".docx")) { + // Mostrar um diálogo de confirmação antes de iniciar o download + new AlertDialog.Builder(MainActivity.this) + .setTitle("Download") + .setMessage("Deseja baixar o arquivo?") + .setPositiveButton("Sim", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); + String cookies = CookieManager.getInstance().getCookie(url); + String fileName = URLUtil.guessFileName(url, null, null); + request.addRequestHeader("cookie", cookies); + request.addRequestHeader("User-Agent", view.getSettings().getUserAgentString()); + request.setDescription("Baixando arquivo..."); + request.setTitle(fileName); + request.allowScanningByMediaScanner(); + request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); + + DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); + dm.enqueue(request); + Toast.makeText(getApplicationContext(), "Baixando arquivo...", Toast.LENGTH_LONG).show(); + } + }) + .setNegativeButton("Não", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }) + .setIcon(android.R.drawable.ic_menu_save) + .show(); + return true; // Bloquear a WebView de carregar o URL de arquivo diretamente + } + + // Permitir que URLs de outras páginas sejam carregadas na WebView + return false; } } }