2013-08-01 13 views
19

Ich habe diesen Code, aber nicht, weil es funktioniert, es öffnet sich in Webview und was ich will ist, dass die Links nicht zu meiner Website in Ihrem Standard-Browser geöffnet sind. Irgendeine Idee? DankÖffnen Sie externe Links im Browser mit Android Webview

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); 
      } 

      } 
     } 

Antwort

61

Das Problem ist, dass Sie eine Intent auf den Standard-Web-Browser senden müssen Sie den Link zu öffnen. Was Sie tun, ist nur eine andere Methode in Ihrem Webview aufrufen, um den Link zu behandeln. Wann immer eine andere App mit etwas umgehen soll, müssen Sie Intents verwenden. Probieren Sie stattdessen diesen Code aus.

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

Können wir Zuhörer lange Klick auf webview Links? – TheOnlyAnil

+0

Jetzt habe ich das getan. Die App stürzt jedoch ab, weil einige ActivityNotFoundException. – superUser

+0

@superUser Sie sollten Ihre eigene Frage öffnen. – onit

3

Hier ist sehr süß und kurze Lösung

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

Im Folgenden werde ich sehr einfache Lösung haben ..

Für Example.to Last facebook.com auf der Webansicht und alle anderen URL in Browser ->

- Setup-onCreate

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

Machen Sie eine innere Klasse ..

public class MyAppWebViewClient erweitert 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

Da API-Ebene 24 shouldOverrideUrlLoading(WebView view, String url) veraltet.

AskGamblers Lösung:

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; 
     } 
    }); 
Verwandte Themen