본문 바로가기

안드로이드

[안드로이드] 웹뷰에서 intent 처리하기

@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    if (!request.getUrl().toString().startsWith("http://") && !request.getUrl().toString().startsWith("https://") && !request.getUrl().toString().startsWith("javascript:")) {
        Intent intent = null;
        try {
            intent = Intent.parseUri(request.getUrl().toString(), Intent.URI_INTENT_SCHEME);

            Uri uri = Uri.parse(intent.getDataString());
            startActivity(new Intent(Intent.ACTION_VIEW, uri));

            return true;
        } catch (URISyntaxException ex) {
            return false;
        } catch (ActivityNotFoundException e) {
            if (intent == null)
                return false;

            String packageName = intent.getPackage();

            if (packageName != null) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)));
                return true;
            }
            return false;
        }
    }
    return super.shouldOverrideUrlLoading(view, request);
}

그 동안 로딩되는 url에서 인텐트가 포함 되어 있는 경우 url을 잘라서 사용하는 경우가 있었는데

 

롤리팝 이후 버전부터는 WebResourceRequest를 사용해서 간단하게 구현이 가능한 것 같다.

 

위 코드 처럼 "http://" "https://" "javascript:" 로 시작하지 않는 url 주소에 대해서는 인텐트에 해당하는 앱을 실행하거나 앱이 없다면 플레이스토어로 연동 시켜준다.