티스토리 뷰
728x90
반응형
webview에서 다른 앱을 호출할 때 보통 intent 호출을 사용한다.
intent 호출 시 net::ERR_UNKNOWN_URL_SCHEME 에러가 발생할 것이다.
해당 코드를 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