Android WebView, cómo manejar las redirecciones de aplicación en lugar de abrir un navegador
-
28-09-2019 - |
Pregunta
Así que ahora mismo en mi aplicación de la URL que estoy accediendo tiene una redirección, y cuando esto sucede, la vista Web se abrirá un nuevo navegador, en lugar de quedarse en mi aplicación. ¿Hay alguna manera de cambiar la configuración para la vista redirigirá a la URL como normal, pero la estancia en mi aplicación en lugar de abrir un nuevo navegador?
Editar:
Quiero la URL de redireccionamiento, sólo que no sé cómo crearla, por lo que la única manera de llegar a esa URL es a través de uno que hará que una redirección a la que quiero.
Por ejemplo: Cuando vaya aquí: http: // www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 aviso de cómo se va a redirigir la dirección URL del producto real. En mi aplicación, si lo abro en un nuevo navegador, que hará que muy bien, sin embargo, si lo guardo en mi aplicación con una vista Web, se mostrará como si estuviera haciendo una búsqueda para k = 9780735622777, de esta manera: http://www.amazon.com / gp / aw / s / ref = is_s_? k = k% 3D9780735622777 y x = 0 y y = 0 . O, se abrirá la vista en el navegador y mostrar lo que es apropiado. Sin embargo, quiero mantener todo en mi aplicación.
Solución
Crea un WebViewClient, y anular la 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
}
});
Otros consejos
De acuerdo con el oficial documentación rel="noreferrer">, un clic en cualquier enlace en lanzamientos WebView una aplicación que gestiona las direcciones URL, que por defecto es un navegador. Necesita anular el comportamiento por defecto como éste
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
Simplemente añadiendo una WebViewClient
personalizado predeterminado va a hacer. Esto hace que el mango WebView ningún sí urls cargados.
mWebView.setWebViewClient(new WebViewClient());
tendrá que configurar su WebviewClient encargo anulando shouldOverrideUrlLoading método 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.
}
});
Pedido del código de ejemplo para el manejo de las direcciones URL de redirección y abierta pdf sin descarga, en vista web. https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500
Crear una clase que implementa webviewclient y añada el siguiente código que permite ovveriding la cadena de URL, como se muestra a continuación. Se puede ver estos ejemplo
public class myWebClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
En el constructor, cree un objeto en vista web 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, añadir el siguiente código para realizar la carga de las direcciones 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() {
//
//
}
Por favor use el siguiente código Kotlin
webview.setWebViewClient(object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
view.loadUrl(url)
return false
}
})
Para obtener más información haga clic aquí