안드로이드 프로그램을 할 때, 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
'프로그램 > 안드로이드' 카테고리의 다른 글
안드로이드 + 이클립스에서 Android SDK 를 업뎃하라고 나오는데, 업뎃하면 에러 떨어질 때. (0) | 2014.04.07 |
---|---|
LG G2 로 이클립스 안드로이드 개발자 모드 변경. (0) | 2014.03.19 |
Android 에서 Application 객체로 전역변수를 사용할 수 없을 때. (0) | 2013.12.04 |
안드로이드용 지뢰찾기. (0) | 2012.01.26 |
Android Back Key 이용법 (0) | 2012.01.15 |