2013-08-01 14 views
19

Mam ten kod, ale nie dlatego, że działa, on wciąż otwiera się w widoku internetowym i to, czego chcę, to że linki nie należą do mojej witryny internetowej w domyślnej przeglądarce. Dowolny pomysł? dziękiOtwieranie zewnętrznych odnośników w przeglądarce za pomocą przeglądarki internetowej na Androida

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

      } 
     } 

Odpowiedz

61

Problem polega na wysłaniu Intent do domyślnej przeglądarki internetowej, aby otworzyć łącze. To, co robisz, to po prostu wywołanie innej metody w twojej przeglądarce, aby obsłużyć link. Ilekroć chcesz, aby inna aplikacja obsługiwała coś, musisz użyć intencji. Zamiast tego wypróbuj ten kod.

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

Czy możemy mieć długie kliknięcie słuchacza na Webview linków? – TheOnlyAnil

+0

Teraz to zrobiłem. Jednak aplikacja ulega awarii, ponieważ niektóre ActivityNotFoundException. – superUser

+0

@superUser Powinieneś otworzyć własne pytanie. – onit

3

Oto bardzo słodki i krótki rozwiązanie

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

Poniżej mam bardzo proste rozwiązanie ..

Dla Example.to obciążenia facebook.com na WebView i wszystkich innych URL w przeglądarce ->

- Konfiguracja onCreate

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

Złóż Klasa wewnętrzna ..

public class MyAppWebViewClient rozciąga 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

Ponieważ poziom API 24 shouldOverrideUrlLoading(WebView view, String url) jest przestarzała.

aktualne rozwiązania:

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; 
     } 
    }); 
Powiązane problemy