WebView内のHTMLのリンクにURLスキームとかhttp以外の遷移がある時の対処 – Android

[PR]

Androidの場合はURLスキームって言わないらしいけどね。
なんせiOSと共通のHTMLでこういう対処することがあったのそういう時の対処をメモがてら。

こんな感じ

wv.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // リンク先がURLスキームの場合は別アプリに遷移
        if (!url.startsWith("file:") && !url.startsWith("http:") && !url.startsWith("https:")) {
            view.stopLoading();
            if (url.startsWith("hoge:") && checkPackageNameToka(c, "hoge")) {
                return true;
            }
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
            view.getContext().startActivity(intent);
            return true;
        }
        return super.shouldOverrideUrlLoading(view, url);
    }
});

例によって、wvはWebViewね。

単純にURLが「file:」「http:」「https:」じゃない場合はなんかどっかに行く

checkPackageNameToka(c, “hoge”)ってのは、別にそんなクラスはなくて、例えば内包しているHTMLに設置されてるリンクに、そのURLから起動するアプリのパッケージ名が分かってるものがあれば、起動前にパッケージの存在チェックみたいなのを入れたほうがええで!って話。

じゃないと落ちるんだけど、それよりはstartActivity()をtry〜catchした方がいいのか。(今気づいた。)