studio hacer como codigo app android android-webview

hacer - web view android



Android WebView, cómo manejar los redireccionamientos en la aplicación en lugar de abrir un navegador (5)

Entonces, en este momento, en mi aplicación, la URL a la que estoy accediendo tiene una redirección, y cuando esto suceda, la WebView abrirá un nuevo navegador, en lugar de permanecer en mi aplicación. ¿Hay alguna manera de que pueda cambiar la configuración para que la Vista redirija a la URL como lo hace normalmente, pero quédese en mi aplicación en lugar de abrir un nuevo navegador?

Editar:

Quiero la URL de redireccionamiento, simplemente no sé cómo crearla, así que la única manera de llegar a esa URL es a través de una que redireccionará a la que yo quiero.

Por ejemplo: cuando vaya aquí: http://www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 observe cómo redirigirá la URL al producto real. En mi aplicación, si lo abro en un nuevo navegador, funcionará muy bien; sin embargo, si lo mantengo en mi aplicación con WebView, aparecerá como si estuviera buscando k = 9780735622777, así: http://www.amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y=0 . O bien, abrirá la vista en el navegador y mostrará lo que sea apropiado. Sin embargo, quiero mantener todo en mi aplicación.


Cree un WebViewClient y anule el método shouldOverrideUrlLoading .

webview.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url){ // do your handling codes here, which url is the requested url // probably you need to open that url rather than redirect: view.loadUrl(url); return false; // then it is not handled by default action } });


Cree una clase que implemente webviewclient y agregue el siguiente código que permite omitir la cadena url como se muestra a continuación. Puedes ver estos example

public class myWebClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }

En su constructor, cree un objeto webview como se muestra a continuación.

web = new WebView(this); web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT));

A continuación, agregue el siguiente código para realizar la carga de URL dentro de su aplicación

WebSettings settings=web.getSettings(); settings.setJavaScriptEnabled(true); web.loadUrl("http://www.facebook.com"); web.setWebViewClient(new myWebClient()); web.setWebChromeClient(new WebChromeClient() { // // }

example


De acuerdo con la documentation oficial, al hacer clic en cualquier enlace en WebView, se inicia una aplicación que maneja las URL, que de forma predeterminada es un navegador. Debe anular el comportamiento predeterminado como este

myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } });


Deberá configurar su WebviewClient personalizado anulando el método shouldOverrideUrlLoading para su vista web antes de cargar la url.

mWebView.setWebViewClient(new WebViewClient() { @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView webView, String url) { return shouldOverrideUrlLoading(url); } @TargetApi(Build.VERSION_CODES.N) @Override public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request) { Uri uri = request.getUrl(); return shouldOverrideUrlLoading(uri.toString()); } private boolean shouldOverrideUrlLoading(final String url) { Log.i(TAG, "shouldOverrideUrlLoading() URL : " + url); // Here put your code return true; // Returning True means that application wants to leave the current WebView and handle the url itself, otherwise return false. } });

Verifique el código de ejemplo para manejar URL de redirección y abra PDF sin descargar, en la vista web. https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500


Solo agregar un WebViewClient personalizado predeterminado servirá. Esto hace que WebView maneje las URL cargadas.

mWebView.setWebViewClient(new WebViewClient());