본문 바로가기

Android/WebView

[Android] WebView - URL Interrupt

WebView Reference


Android Application 내부에서 Html등의 웹 컨텐츠 들을 사용하기 위해서 WebView라는 녀석이 있습니다.
webkit 패키지에 속해있는 녀석이구요.


이번에 보고 갈 부분은, 웹뷰에 보여지는 페이지에서 어떤 액션을 해서 페이지를 이동한다거나 할때!
url을 체크해서 원하는 url이 왔을때, 애플리케이션 자체에서 기능을 구현하는 것입니다.

기본적으로 <a> ~ </a> 이런 a 태그에 링크가 들어있을텐데요.
이 경우 안드로이드의 webkit에서는 4가지의 url타입에 대해 기본 지원을 해줍니다.

 android.webkit.WebView 에서 기본적으로 지원하는 URL type

 http:// 및 https://      웹페이지 이동
 geo:  구글맵으로 이동
 mailto:  이메일 클라이언트 실행
 tel:  전화다이얼로 이동 







기본적으로 지원해 주는 기능보다 더 많은 것들에 대해 처리하고 싶다면 나머지 부분들은 구현을 해 주어야 합니다.
이건 WebViewClient라는 녀석을 통해 가능합니다.


WebViewClient reference


WebViewClient가 가진 메소드들 중 우리가 봐야 할 메소드는
shouldOverrideUrlLoading(WebView view, String url)이라는 메소드 입니다.


메소드 이름만 보고 짐작을 살짝 해 보자면, url을 통해서 loading하려고 할때, 이 메소드를 override하면, 맘대로 처리할 수있을 것 같은 느낌이 빡!!!! 드는군요.

짧게 말하면, loading되려는 url을 handling 할때 쓰는 녀석입니다.



지금 막 로딩 이벤트가 발생한 녀석의 url은 뒤쪽 파라미터 url에 String type으로 넘어올 것이고,
앞쪽 파라미터 view는 현재 이벤트를 받은 WebView입니다.

이제 url 형식이 내가 interrupt하려는 형식인지를 체크해서 원하는 처리를 해주면 됩니다.
예를 들어 url이 http://croute.me 로 시작하는 모든 링크에 대해서 알럿다이얼로그를 띄우겠다!! 라면,
아래와 같이 처리해 볼 수 있습니다.
(대부분은 상대주소를 써서, 사실 첫 페이지(http://croute.me)말고 인터럽트가 걸리지는 않는군요.)



url이 http://croute.me 로 시작했는지를 확인하고, 알럿을 띄워서 이동하겠소라는 버튼을 클릭하면,
그때서야 페이지로 이동시켜주는 코드입니다.
당연히 이 외에도 여러가지 상황에 대해서 체크를 하고 처리를 할 수 있겠죠.