안드로이드 앱에서 WebView를 사용하여 웹 페이지를 표시하는 경우, 특정 도메인의 URL에 대한 동작을 단순히 웹 페이지를 열지 않고, 앱에서 처리해야 하는 경우가 있습니다. 이를 위해 WebViewClientshouldOverrideUrlLoading 메서드를 사용할 수 있습니다.

WebViewClient를 상속하는 커스텀 클래스 만들기

먼저, WebViewClient를 상속하여 MyWebViewClient 클래스를 만듭니다.

class MyWebViewClient : WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
            val url = request.url.toString()
            // 특정 도메인의 URL 처리하기
            if (url.startsWith("http://example.com")) {
                // 이곳에 해당 URL을 처리하는 로직을 작성한다.
                // 예를 들면, 특정 화면으로 이동하거나, 다른 앱을 호출하는 등의 동작을 수행할 수 있다.
                return true // URL 로딩을 앱에서 처리했음을 시스템에 알려줌
            }
            return false // 기본적인 웹 페이지 로딩 동작을 따른다.
        }
    }

WebViewActivity 구현

액티비티의 WebView 에 만든 커스텀 WebViewClient 를 추가해줍니다.

class WebViewActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_webview)

        val webView = binding.webView
        val url = "http://example.com" // 로딩할 웹 페이지 URL

        webView.webViewClient = MyWebViewClient()
    }

    private class MyWebViewClient : WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
            val url = request.url.toString()
            // 특정 도메인의 URL 처리하기
            if (url.startsWith("http://example.com")) {
                // 이곳에 해당 URL을 처리하는 로직을 작성한다.
                // 예를 들면, 특정 화면으로 이동하거나, 다른 앱을 호출하는 등의 동작을 수행할 수 있다.
                return true // URL 로딩을 앱에서 처리했음을 시스템에 알려줌
            }
            return false // 기본적인 웹 페이지 로딩 동작을 따른다.
        }
    }
}

이제 WebView 에서 “http://example.com” 과 같은 특정 도메인의 URL을 로딩하면 기본적인 웹 페이지 로딩이 아닌 따로 정의한 구현으로 동작합니다. 이 방법을 응용하여 앱에 필요한 웹 페이지 인터페이스를 구현하거나 특정 도메인과의 연동을 수행할 수 있습니다.

webView.loadUrl("http://example.com")

Leave a comment