WebブラウザーでURLリンクをクリックした際にアプリケーションを起動する (暗黙的インテントの受信) - Android

WebブラウザでURLリンクをクリックした際にアプリケーションを起動する方法を紹介します。

手順

プロジェクトの作成

Android アプリケーションプロジェクトを作成します。
[New Android Application]ダイアログボックスが表示されますので、以下を設定します。
  • Application Name: "IntentReceive"
  • Project Name: "IntentReceive"
  • Package Name: "com.iPentec.intentreceive"
  • Minimum Required SDK: "API 8: Android 2.2 (Froyo)"
  • Target SDK: "API 17: Android 4.2 (Jelly Bean)"
  • Compile With: "API 17: Android 4.2 (Jelly Bean)"
  • Theme: "Holo Light with Dark Action Bar"

UI

下図のUIを準備します。初期状態からは変更しません。

コード

下記のコードを編集します。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.iPentec.intentreceive"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.iPentec.intentreceive.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
           	<intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="myapp" android:host="simple" />
           	</intent-filter>
        </activity>
    </application>
</manifest>

解説

大部分は新規アプリケーション作成時に生成されたAndroidMaifest.xmlファイルそのままです、追記部分は以下の部分になります。
<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:scheme="myapp" android:host="simple" />
</intent-filter>
intent-filterタグを用いてインテントフィルタを追加しています。リンククリックの際にアプリケーションを起動するため、intent-filteractionにはandroid.intent.action.VIEWを指定します。今回は暗黙インテントの受信をするためandroid.intent.category.DEFAULTcategoryタグで指定します。また、ブラウザのハイパーリンクは、リンクで参照されているデータを表示するためにブラウザにより安全に呼び出すことができるターゲットアクティビティにあたるため、android.intent.category.BROWSABLEcategoryタグで指定します。
dataタグはこのintent-filterに応答するURLを設定します。android:schemeに"myapp"、android:hostに"simple"を設定しました。この場合のアプリケーション起動URLは以下となります
myapp://simple

呼び出し側HTML

以下の呼び出し側のHTMLページを作成します
<html>
<head>
  <meta name="viewport" content="width=device-width,
    user-scale=yes, initial-scale=1.0, maximum-scale=5.0" />
</head>
<body>
  <p>テストページ</p>
  <a href="myapp://simple/command">TEST Link</a>
</body>
</html>
作成後HTMLファイルをWebサーバーなどにアップロードします。

実行結果

プロジェクトを起動します。アプリケーションの画面(下図)が表示されます。


一度アプリケーションを終了し、先ほど作成したアプリ呼び出し用のHTMLファイルをWebブラウザで開きます。下図のHTMLファイルが表示されるので[TEST Link]をタップします。


アプリが起動し下図の画面が表示されます。


Webブラウザのリンクのタップによりアプリケーションが起動できました。

URL、パラメーターの受け取り

先のプログラムではリンクのタップによりアプリケーションが起動できることを確認しました。プログラムにコードを追加してタップされたリンクのURLを取得できるようにします。

UI

下図のUIを作成します。先ほどのフォームにTextViewを一つ配置したものです。配置したTextViewのIDは"textView1"とします。

コード

以下のコードを記述します。
MainActivity.java
package com.iPentec.intentreceive;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.*;
import android.content.*;

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //追加
    Intent intent = getIntent();
    String action = intent.getAction();
    if (Intent.ACTION_VIEW.equals(action)){
      android.net.Uri uri = intent.getData();
 
      TextView textView1 = (TextView)findViewById(R.id.textView1);
      textView1.setText(uri.toString());
    }
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }
}

呼び出し用HTMLファイル

呼び出し用HTMLファイルを以下の通りに変更します。
<html>
<head>
  <meta name="viewport" content="width=device-width,
    user-scale=yes, initial-scale=1.0, maximum-scale=5.0" />
</head>
<body>
  <p>テストページ</p>
  <a href="myapp://simple/dog">TEST Link</a><br/>
  <a href="myapp://simple/cat">TEST Link</a><br/>
  <a href="myapp://simple/fox">TEST Link</a><br/>
  <a href="myapp://simple/penguin">TEST Link</a><br/>
</body>
</html>

実行結果

プロジェクトを実行しアプリケーションをインストールします。下図の画面が表示されます。


一度アプリケーションを終了し、Webブラウザで呼び出し用のhtmlファイルを開きます。Webブラウザにhtmlファイルが表示されます。


HTMLファイル内のリンクをタップします。アプリが起動し、TextViewにタップしたリンクのURLが表示されます。タップするリンクによりURLが変化します。


タップしたリンクのURLの取得ができました。
著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2024-01-04
作成日: 2012-04-19
iPentec all rights reserverd.