레이블이 shouldOverrideUrlLoading인 게시물을 표시합니다. 모든 게시물 표시
레이블이 shouldOverrideUrlLoading인 게시물을 표시합니다. 모든 게시물 표시

2010년 8월 30일 월요일

안드로이드 WebView에서 커스텀 scheme 사용하기 (Use custom scheme in WebView)


안드로이드에서는 WebView에서 링크에 tel: 같은 태그(<a href="tel:01034567890">)가 먹지 않는다. 이런 식으로 WebView가 지원하지 않는 커스텀 scheme을 지원하려면 WebViewClient를 사용하면 된다.

    private class CustomScheme extends WebViewClient {
       public boolean shouldOverrideUrlLoading(WebView view, String url) {
          ...
       }
   }

이런식으로 WebViewClient 오브젝트를 정의하고 WebView에 setWebViewClient() 메소드를 사용해 등록해 주면 된다. 그러면 WebView에 있는 링크가 클릭될 때 마다 WebViewClient 오브젝트의 shouldOverrideUrlLoading() 메소드가 호출된다.

  WebView wv = (WebView)findViewById(R.id.myWebView);
  wv.setWebViewClient(new CustomScheme());

shouldOverrideUrlLoading() 메소드가 호출될 때 클릭된 링크의 url 스트링이 argument로 넘겨지기 때문에 url중에서 scheme 부분을 비교해서 원하는 동작을 하도록 해 주면 된다.

        if (url.startsWith("tel:")) {
         Intent i = new Intent(Intent.ACTION_CALL, Uri.parse(url));
          startActivity(i);
          return true;
        }
        return false;