도리안의 Android 개발 #4 - 웹뷰의 URL 로딩을 오버라이드 하는 방법

avatar



대문 제작: @imrahelk

아래와 같이 고객사의 요청 사항 중에 웹 뷰에서 직접 처리할 수 없는 기능이 있었습니다.

요청 사항

  • 웹 뷰에서 전화 아이콘 클릭시 통화 화면으로 연결해 달라.

해결 방법

위 요구 사항은 웹뷰의 URL 로딩을 오버라이드 하여 해결할 수 있습니다. 이는 웹뷰가 특정 URL에 대해서는 기존 방식의 URL 로딩이 아닌 다른 처리를 할 수 있음을 의미합니다.

(1) shouldOverrideUrlLoading 메소드를 오버라이드 하는 WebViewClient 객체를 정의하세요.

WebViewClient exWebViewClient = new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return super.shouldOverrideUrlLoading(view, url);
    }
};

(2) 오버라이드 할 URL을 체크하는 if 문을 추가하고, 처리할 작업을 프로그래밍 하세요. 그리고 리턴 값은 다음과 같이 정하세요.

  • true: 웹뷰가 이 URL을 처리하지 않으면, true를 리턴
  • false: 웹뷰가 이 URL을 처리해야 하면, false를 리턴
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    // 예: "tel://"로 시작하는 URL이면, 통화 화면으로 연결 처리. 웹뷰는 이 URL을 처리 안 함.
    if (url.startsWith("tel://") {
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse(url));
        startActivity(intent);
        return true;
    }

    return super.shouldOverrideUrlLoading(view, url);
}

(3) 위에서 정의한 WebViewClient 객체를 웹뷰의 WebViewClient로 설정하세요.

WebView wvExample = findViewById(R.id.wvExample);
wvExample.setWebViewClient(exWebViewClient);

참고 포스트

zzanbanner.jpg
스팀짱오픈카톡방 바로가기

aaronhong_banner.jpg



0
0
0.000
0 comments