2011-12-15 8 views
7

po kliknięciu linków w mojej aplikacji otwiera się w tym samym widoku internetowym. Chcę je otworzyć w zewnętrznej przeglądarce.Wyświetlanie systemu Android, tworzenie adresów URL w różnych przeglądarkach

Zrobiłem to:

myWebView.setWebViewClient(new WebViewClient() 
{ 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        return false; 
       } 

}); 

powrocie fałszywe czyni go załadować w tym samym WebView i powrót „true” sprawia, że ​​nic nie stanie, gdy kliknięciu linku.

Spojrzałem na inne pytania, ale wydaje się, że wszyscy mają dokładnie odwrotny problem. (one chcą linki do ładowania w ich aplikacji)

co robię źle?

+0

Czy dowiązanie to prawdziwy link (URL) lub fragment kodu javascript? –

+0

prawdziwy link html. – CQM

Odpowiedz

12

W swojej WebViewClient

@Override 
public boolean shouldOverrideUrlLoading(final WebView view, final String url){ 
    if (loadUrlExternally){ 
     Uri uri = Uri.parse(url); 
     Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
     startActivity(intent); 
     return true; //the webview will not load the URL 
    } else { 
     return false; //the webview will handle it 
    } 
} 

ten sposób otwiera się w nowym oknie przeglądarki tak samo każda inna aplikacja będzie.

+2

to działa, należy również ustawić powrót do "Prawdziwy", ponieważ spowoduje to skopiowanie ładowania zarówno w przeglądarce, jak i w przeglądarce. – CQM

1

Oto bardziej kompletna odpowiedź. Uwaga: Dzwonię z fragmentu stąd getActivity() before startActivity()

@Override 
    public boolean shouldOverrideUrlLoading(final WebView view, final String url) 
    { 
     //check if the url matched the url loaded via webview.loadUrl() 
     if (checkMatchedLoadedURL(url)) 
     { 
      return false; 
     } else 
     { 
      getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      return true; 
     } 

/** 
    * used to check if the loaded url matches the base url loaded by the fragment(mUrl) 
    * @param loadedUrl 
    * @return true if matches | false if doesn't or either url is null 
    */ 
    private boolean checkMatchedLoadedURL(String loadedUrl) 
    { 
     if (loadedUrl != null && mUrl != null) 
     { 
      // remove the tailing space if exisits 
      int length = loadedUrl.length(); 
      --length; 
      char buff = loadedUrl.charAt(length); 
      if (buff == '/') 
      { 
       loadedUrl = loadedUrl.substring(0, length); 
      } 

      // load the url in browser if not the OTHER_APPS_URL 
      return mUrl.equalsIgnoreCase(loadedUrl); 
     } 
     return false; 
    } 
Powiązane problemy