도리안의 Android 개발 #4 - 웹뷰의 URL 로딩을 오버라이드 하는 방법
대문 제작: @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);
참고 포스트
스팀짱오픈카톡방 바로가기
0
0
0.000
0 comments