프로그램/안드로이드

webkit 에서 <a href="tel:전화번호"></a> 가 안 먹힐 때

(주)CKBcorp., 2013. 10. 14. 02:41
반응형


안드로이드 프로그램을 할 때, hybrid 로 짤때가 있다. 즉, 내부 로직이랑 엔진, 데이터나 통신 등은 전부 뒷단에 놓고, 사용자 UI 는 webkit 을 써서 html 로 짜는거지. 


자세한 건 주제에 벗어나니 하려는 이야기만 하자면, 

이런 식으로 html 을 사용자 UI 로 쓸 경우, html 안에


<a href="tel:전화번호">

<a href="sms:전화번호"> 



등으로 전화번호에 전화를 걸거나, 문자를 보내는 기능을 구현하기도 한다.

근데, 이거... 아무런 코드 수정 없이 그대로 쓰면 전화가 걸리거나 문자가 가는 게 아니고, 위의 "tel:", "sms:" 를 url 링크로 인식해 버린다예를 들어 


<a href="tel:010-1234-5678">010-1234-5678</a>

 

과 같은 코드가 있을 경우, 클릭하면 010-1234-5678 로 전화 걸리는 게 아니라, "tel:010-1234-5678" 이라는 웹 주소로 이동하는 것과 같은 효과가 나와버림.


이거 왜냐면, 원래 WebView 에는 이러한 "tel:", "sms:" 를 처리하는 기능이 없기 때문이다.


이를 해결하려면, 아래와 같은 방법으로 해결해야 한다.


1. WebView 를 Activity 에서 상속받아 사용하는 경우.


class ActivityWebViewClient extends WebViewClient {

@Override

public boolean shouldOverrideUrlLoading( WebView view, String url ) {

...

if ( url.startsWith("tel:") ) {

startActivity( new Intent( Intent.ACTION_DIAL, Uri.parse( url ) );

} else {

view.loadUrl( url );

}

...

}

}


2. WebView 를 코드에서 사용하는 경우.


...

        webView1.setWebViewClient( new WebViewClient(){

        @Override

        public boolean shouldOverrideUrlLoading( WebView view, String url )

        {

...

        if ( url.startsWith("tel:") )

        {

startActivity( new Intent( Intent.ACTION_DIAL, Uri.parse( url ) );

         } else 

        {

        view.loadUrl(url);        

        }

...

         }

        } );

...





즉, shouldOverrideUrlLoading() 함수를 재정의해서, 전화번호나 문자발송 등의 헤더에 관련한 처리를 추가하는 거다.

물론, 이걸 더 응용하면, url 의 "http" 부분 대신 자신이 원하는 token 을 추가로 넣어서 유연한 처리를 기대할 수도 있다.


참고 링크들은 아래와 같다.

http://stackoverflow.com/questions/4338305/android-webview-tel-links-show-web-page-not-found

http://www.androidside.com/plugin/mobile/board.php?bo_table=B49&wr_id=51117

http://muzesong.tistory.com/73







 


반응형