2013-08-01 11 views
19

Ho questo codice, ma non perché funzioni, continua ad aprirsi in webview e quello che voglio è che i collegamenti non appartengono al mio sito web aperto nel browser predefinito. Qualche idea? grazieApre i collegamenti esterni nel browser con la web view Android

private class CustomWebViewClient extends WebViewClient { 
     @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       if(url.contains("message2space.es.vu")){ 
       view.loadUrl(url); 
       return true; 
      }else{ 
       return super.shouldOverrideUrlLoading(view, url); 
      } 

      } 
     } 

risposta

61

Il problema è che devi inviare una Intent al browser web predefinito per aprire il collegamento. Quello che stai facendo è solo chiamare un metodo diverso nella tua Webview per gestire il collegamento. Ogni volta che vuoi che un'altra app gestisca qualcosa devi usare Intents. Prova questo codice invece.

private class CustomWebViewClient extends WebViewClient { 
     @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       if(url.contains("message2space.es.vu")) { 
       view.loadUrl(url); 
       } else { 
       Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(i); 
       } 
       return true; 
      } 
     } 
+0

possiamo avere click lungo ascoltatore sui link WebView? – TheOnlyAnil

+0

Ora ho fatto questo. Tuttavia, l'app si arresta in modo anomalo perché alcuni ActivityNotFoundException. – superUser

+0

@superUser Dovresti aprire la tua domanda. – onit

3

qui è molto dolce e breve soluzione

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    context.startActivity(i); 
    return true; 
} 
0

Qui di seguito ho soluzione molto semplice ..

Per Example.to carico facebook.com sulla WebView e tutti gli altri url in del browser ->

- Setup onCreate

webView.loadUrl("http://m.facebook.com"); 
    webView.setWebViewClient(new MyAppWebViewClient()); 

Fai una classe interna ..

public class MyAppWebViewClient estende WebViewClient {

// handling external links as intents 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 

    if(Uri.parse(url).getHost().endsWith("facebook.com")) { 
     return false; 
    } 

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    view.getContext().startActivity(intent); 
    return true; 
} 

}

2

Dal livello di API 24 shouldOverrideUrlLoading(WebView view, String url) è deprecato.

Fino alla soluzione di data:

webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
      Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl()); 
      view.getContext().startActivity(intent); 
      return true; 
     } 
    }); 
Problemi correlati