아래와 같이 고객사의 요청 사항 중에 웹 뷰에서 직접 처리할 수 없는 기능이 있었습니다.
위 요구 사항은 웹뷰의 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 문을 추가하고, 처리할 작업을 프로그래밍 하세요. 그리고 리턴 값은 다음과 같이 정하세요.
@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);