업무의 배경:
웹뷰를 구현할때 단순히, WebView를 이용하여 웹화면을 호출하는 것이 아니라 특정 url를 받을 경우 호스트 응용 프로그램이 제어 할수 있는 기회를 받아야 한다.
업무의 내용:
WebView에 URL이로드 되려고 할 때 호스트 응용 프로그램이 제어할 수 있는 기회를 제공한다. shouldOverrideUrlLoading 영역에서 내부적으로 url에 맞는 행동을(내부 화면 호출 후 종료) 하는 경우, 내부처리를 진행하고 true를 반환하여 URL 로드를 중단거나, false을 반환하여 WebView가 평소와 같이 URL로드를 진행하도록 처리한다.[3]
ShouldOverrideUrlLoading 코드.
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
MyLog.i(TAG,"shouldOverrideUrlLoading(view:"+view+ ", request:"+request+"), request: request.getUrl().toString()"+request.getUrl().toString());
//return super.shouldOverrideUrlLoading(view, request);
return true; //true는 호스트가 제어를 하고 처리했다를 반환, false을 반환하여 WebView가 평소와 같이 URL로드를 진행하도록 처리
}
예제
a태그로 웹에서 스키마를 호출하면, 호스트 응용 프로그램에서 url이 로드 될때 체크하여, 스키마에 맞는 행동을 취한다.[2]
<a href="example-app:showProfile">Show Profile</a>
// The URL scheme should be non-hierarchical (no trailing slashes)
private static final String APP_SCHEME = "example-app:";
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith(APP_SCHEME)) {
urlData = URLDecoder.decode(url.substring(APP_SCHEME.length()), "UTF-8");
respondToData(urlData);
return true;
}
return false;
}
참고자료:
[1]가이드>웹 기반 콘텐츠, https://developer.android.com/guide/webapps?hl=ko
[2]가이드>웹 기반 콘텐츠>Android 4.4에서 WebView로 이전> 맞춤 URL 처리, https://developer.android.com/guide/webapps/migrating?hl=ko
[3]참고>WebViewClient>shouldOverrideUrlLoading,
https://developer.android.com/reference/android/webkit/WebViewClient?hl=ko#shouldOverrideUrlLoading(android.webkit.WebView,%20android.webkit.WebResourceRequest)
'안드로이드' 카테고리의 다른 글
[Android] Anroid local html 불러오기 (javaScript onclick 구현) (1/3) (0) | 2021.09.29 |
---|---|
[Android] Webview에서 URI_INTENT_SCHEME 오류 (0) | 2021.09.29 |
[Android] 웹뷰 webview window.open 처리 (웹뷰 고급편) (8) | 2021.09.29 |
[Android] 하이브리드 앱 만들기 (기본편)Hybrid webview default (0) | 2021.09.29 |
[Android] 웹뷰(webview) 디버깅(debugging) 방법. (0) | 2021.09.29 |