2011-12-15 8 views
7

내 앱에서 링크를 클릭하면 동일한 웹보기로 열립니다. 나는 그들이 외부 브라우저에서 열길 바란다.Android Webview, 다른 브라우저에서 URL 열기

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

}); 

이 같은 웹뷰 내에서로드 할 수 있습니다 false를 반환하고, 링크를 클릭하면 아무것도 일어나지한다 "true"를 반환 :

나는 이런 짓을.

다른 질문을 살펴 보았지만 다른 모든 사람들은 정반대의 문제가있는 것 같습니다. (그들 애플 리케이션에로드 할 링크를 원합니다)

내가 뭘 잘못하고 있니? 당신의 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 
    } 
} 

그런 식으로

+0

링크는 실제 링크 (URL) 또는 자바 스크립트 코드일까요? –

+0

true html 링크. – CQM

답변

12

는 새 브라우저 창을 다른 응용 프로그램은 것 같은 방법으로 열립니다.

+2

이 작동하고 반환 값을 "True"로 설정해야합니다. 그렇지 않으면 브라우저뿐만 아니라 webview에서도로드가 복제됩니다. – CQM

1

다음은보다 완벽한 답변입니다. 참고 : 나는 조각에서부터 시작하여 startActivity() 전에 getActivity()를 호출합니다.

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