티스토리 뷰

728x90
반응형

 

 

 

webview에서 다른 앱을 호출할 때 보통 intent 호출을 사용한다.

 

intent 호출 시 net::ERR_UNKNOWN_URL_SCHEME 에러가 발생할 것이다.

 

< Error 화면 >

 

해당 코드를 WebViewClient에 추가해주면 해결된다. (자바, 코틀린)

//자바
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url != null && url.startsWith("intent://")) {
        try {
            Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
            Intent existPackage = getPackageManager().getLaunchIntentForPackage(intent.getPackage());
            if (existPackage != null) {
                startActivity(intent);
            } else {
                Intent marketIntent = new Intent(Intent.ACTION_VIEW);
                marketIntent.setData(Uri.parse("market://details?id=" + intent.getPackage()));
                startActivity(marketIntent);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else if (url != null && url.startsWith("market://")) {
        try {
            Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
            if (intent != null) {
                startActivity(intent);
            }
            return true;
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }
    view.loadUrl(url);
    return false;
}

// 코틀린
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
    if (url != null && url.startsWith("intent://")) {
        try {
            val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME)
            val existPackage =
                packageManager.getLaunchIntentForPackage(intent.getPackage()!!)
            if (existPackage != null) {
                startActivity(intent)
            } else {
                val marketIntent = Intent(Intent.ACTION_VIEW)
                marketIntent.data =
                    Uri.parse("market://details?id=" + intent.getPackage()!!)
                startActivity(marketIntent)
            }
            return true
        } catch (e: Exception) {
            e.printStackTrace()
        }

    } else if (url != null && url.startsWith("market://")) {
        try {
            val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME)
            if (intent != null) {
                startActivity(intent)
            }
            return true
        } catch (e: URISyntaxException) {
            e.printStackTrace()
        }

    }
    view.loadUrl(url)
    return false
}

 

 

 

 

 

728x90
반응형
댓글

"이 블로그의 모든 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday