Android WebView, como lidar com redirecionamentos no aplicativo em vez de abrir um navegador

StackOverflow https://stackoverflow.com/questions/4066438

  •  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.

Foi útil?

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() {
      // 
      //
    }

Baixar demonstração

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top