본문 바로가기

개발 코딩 정보 공유/안드로이드 자바 코틀린

안드로이드 'ShouldOverrideUrlLoading' 너는 누구냐?

 

 

Jens Mahnke / pixels

 

 

 

 

안녕하세요.

오늘은 안드로이드 개발중 웹뷰를 사용하여 개발할때 반드시 알아두어야 할 녀석이죠.

 

'ShouldOverrideUrlLoading' 바로 이놈입니다. 

웹뷰 사용시 이부분을 거치지 않으면 빈깡통 같은 웹뷰가 될것입니다.

따라서 여기서 특정한 동작을 컨트롤 하면 되는데요. 

이녀석은 보통 아래와 같이 사용합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    /**
     * WebViewClient
     */
    private inner class WebClient : WebViewClient() {
 
       override shouldOverrideUrlLoading(view:WebView , url:String) {
           //...
            return true
        }
}
 

 

그런데 이 'shouldOverrideUrlLoading' 라는 녀석이 사실은 꽤 오래전 deprecation 되었습니다. 

어? 그럼 뭘쓴단말이야?

 

바로 이놈으로 바뀌었습니다.

 

'shouldOverrideUrlLoading(WebView view, WebResourceRequest request)'

(뭔차이야 이게??? 장난해?? 자세히 보면 다릅니다.)

 

어? url? 은 어디갔죠???

request.url 객체를 꺼내서 쓰면 됩니다.

 

자 그럼 여기서 끝일까요?

문제는 또 있습니다.

 

안드로이드는 minSdk, TargetSdk 라는것을 설정하는데요. 우리의 앱이 API 24 이하를 지원한다면

에휴... 안타깝게도 코드 한줄 더 추가해주셔야 합니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
     @SuppressWarnings("deprecation")
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //... 구현
        return true
    }
 
    @TargetApi(Build.VERSION_CODES.N)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        //... 구현
        return true
 
    }

 

자동으로 좀 해주면 안되겠니?

안드로이드는 개발하면 할수록 불친절 합니다^^;;

 

그럼 여기서 끝인가요??

 

아뇨.

 

문제는 또 있습니다.

문제라기 보다 주의 사항정도로 보시죠

 

처음 shouldOverrideUrlLoading 를 생성하게 되면 super.shouldOverrideUrlLoading를 호출 하기도 하는데요.

이는 해당 메서드가 버전별로 여러번 호출될수 있으니

shouldOverrideUrlLoading 을 작성했다는것은 내가 웹 로드 를 컨트롤 하겠다는 의미 이므로 super를 따로 호출하지 않도록 합니다.

 

이상 안드로이드 지식공유 였습니다.