AndroidのWebViewで「LINEで送る」ボタンに対応させる


概要

WebViewClient の shouldOverrideUrlLoading の返り値を false にしてアプリ内webviewで回遊させるようにしている場合、「LINEで送る」ボタンをクリックした後に表示される以下のような画面で「LINEアプリで開く」のボタンがそのままだと動かないのでその対応方法です。

対応方針

「LINEアプリで開く」のボタンのリンクURLはSchemeが intent:// になっています。
なので、shouldOverrideUrlLoadingで受け取ったURLのSchemeがintentだった場合に、URLからINTENTインスタンスを作るようにします。

下記のstackoverflowの記事を参考にしています。
http://stackoverflow.com/questions/33151246/how-to-handle-intent-on-a-webview-url

実装例

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                if ("intent".equals(request.getUrl().getScheme())) {
                    onLoadIntentSchemeUrl(request);
                    return true;
                }
                return false;
            }

            private void onLoadIntentSchemeUrl(WebResourceRequest request) {
                Intent intent;
                try {
                    intent = Intent.parseUri(request.getUrl().toString(), Intent.URI_INTENT_SCHEME);
                } catch (URISyntaxException e) {
                    intent = null;
                }

                if (intent == null) {
                    // URLからIntentをつくれなかった
                    return;
                }

                ResolveInfo info = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
                if (info != null) {
                    // intentに対応するパッケージがあったときだけstartActivityをする
                    startActivity(intent);
                }
            }
        });