AndroidのWebビューにクリック可能な電話番号を表示する方法 - TechRepublic

AndroidのWebビューにクリック可能な電話番号を表示する方法 - TechRepublic

出版

ウィリアム・J・フランシスの画像

Android の Web ビュー内のリンクを傍受するための、デバイスに依存しない簡単なトリックを紹介します。

クライアントの依頼でWebビューの開発に取り組んでいます。ネイティブアプリ開発者にとって、Webビューは特に難しい課題です。最近私が克服した課題の一つは、Webビューにクリック可能な電話番号を表示することでした。

クライアントの要望は十分に納得のいくものでした。ウェブページに電話番号が表示され、ユーザーがその電話番号をクリックすると、ウェブサイトから事前に入力された電話番号が入ったダイヤラーがアプリによって起動されるという仕組みです。

私が読んだ限りでは、これはモバイルブラウザで「問題なく動作する」はずです。リンクのhrefの先頭に「tel:」が付いていれば、モバイルブラウザを実行しているデバイスはプラットフォームに適した動作をするはずです。実際には、様々なメーカーのデバイスでかなりの数が宣伝通りに動作しましたが、そうでないデバイスもかなりありました。幸いなことに、Android SDKにはバージョン1.0以降、アプリが読み込みURLをインターセプトし、必要に応じて動作をオーバーライドできるメカニズムが搭載されています。

このチュートリアルでは、Webビューでユーザーが電話番号リンクをタップし、それに続いて電話アプリを起動する動作をインターセプトする方法を説明します。このテクニックは、デバイスのモバイルブラウザがhrefをどのように解釈するか(あるいは解釈しないか)に関係なく使用できます。チュートリアルに沿って進めていくか、プロジェクト全体をダウンロードしてEclipseに直接インポートしてください。

1. Eclipseで新しいAndroidプロジェクトを作成します。Android 2.3(Gingerbread)以降をターゲットとします。

2. /res/layout フォルダで、activity_main.xml に Web ビューを追加します。

activity_main.xml

3. /src/MainAcitvity.java ファイル内に新しい Web ビュークライアントを作成し、作成時に Web ビューに割り当てます。残りは、ダイヤラーを開いて URL に埋め込まれた電話番号を渡すための標準的な Android インテントです。

MainActivity.java
package com.authorwjf.webview_link_intercept;

import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity {

private static final String HTML ="Click here to call!";
private static final String TEL_PREFIX = "tel:";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv = (WebView) findViewById(R.id.webview);
wv.setWebViewClient(new CustomWebViewClient());
wv.loadData(HTML, "text/html", "utf-8");
}

private class CustomWebViewClient extends WebViewClient {

@Override
public boolean shouldOverrideUrlLoading(WebView wv, String url) {
if(url.startsWith(TEL_PREFIX)) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
return false;
}
}

}

おそらくお気づきかと思いますが、この例ではダイヤラーを起動していますが、should override url 読み込み関数で true を返すことで、アプリのフローを任意の方法でリダイレクトできます。このデバイスに依存しない手法は、ここで説明したシナリオ以外にも、多くのシナリオで役立つと思います。

Web ビューの動作を実際に確認したい場合は、APK をコンパイルしてデバイスまたはエミュレーターにロードするだけです。

図A

図B

記事をシェア
ウィリアム・J・フランシスの画像

ウィリアム・J・フランシス

ウィリアムは自称「メーカー」です。20年以上の業界経験を持ち、世界有数の有名ブランドのデジタルソリューション構築に携わってきました。著書も出版しており、特許取得済みの発明家であり、短期間ながらAmazonで1位を獲得したビデオゲームの開発者でもあります。

Tagged: