Android WebView, como lidar com redirecionamentos no aplicativo em vez de abrir um navegador
-
28-09-2019 - |
Pergunta
Então, agora no meu aplicativo, o URL que estou acessando tem um redirecionamento e, quando isso acontecer, o WebView abrirá um novo navegador, em vez de ficar no meu aplicativo. Existe uma maneira de alterar as configurações para que a visualização seja redirecionada para o URL como o normal, mas fique no meu aplicativo em vez de abrir um novo navegador?
Editar:
Eu quero o URL redirecionado, simplesmente não sei como criá -lo; portanto, a única maneira de chegar a esse URL é através de uma que causará um redirecionamento para o que eu quero.
Por exemplo: quando você vai aqui: http://www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 Observe como ele redirecionará o URL para o produto real. No meu aplicativo, se eu o abrir em um novo navegador, isso fará isso bem, no entanto, se eu o mantiver no meu aplicativo com um WebView, ele aparecerá como se estivesse pesquisando k = 9780735622777, assim: http://www.amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y=0 . Ou, ele abrirá a vista no navegador e mostrará o que é apropriado. No entanto, quero manter tudo no meu aplicativo.
Solução
Criar um webviewclient e substituir o Overrideurlloading método.
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
}
});
Outras dicas
De acordo com o funcionário documentação, Clique em qualquer link no WebView inicia um aplicativo que lida com URLs, que por padrão é um navegador. Você precisa substituir o comportamento padrão como este
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
Basta adicionar um costume padrão WebViewClient
vai fazer. Isso faz com que o WebView lide com qualquer URLs carregado em si.
mWebView.setWebViewClient(new WebViewClient());
Você terá que definir seu substituto WebViewClient personalizado Overrideurlloading Método para o seu WebView antes de carregar o 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.
}
});
Confira o código de exemplo para manusear URLs de redirecionamento e abrir PDF sem download, no WebView. https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500
Crie uma classe que implementa o WebViewClient e adicione o código a seguir que permite ovizar a sequência de URL, como mostrado abaixo. Você pode ver isso exemplo
public class myWebClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
No seu construtor, crie um objeto WebView, como mostrado abaixo.
web = new WebView(this); web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
Em seguida, adicione o seguinte código para executar o carregamento de URLs dentro do seu aplicativo
WebSettings settings=web.getSettings();
settings.setJavaScriptEnabled(true);
web.loadUrl("http://www.facebook.com");
web.setWebViewClient(new myWebClient());
web.setWebChromeClient(new WebChromeClient() {
//
//
}
Use o código Kotlin abaixo
webview.setWebViewClient(object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
view.loadUrl(url)
return false
}
})
Para mais informações, clique aqui