特定のURLをフックしてアプリを起動させる(暗黙的インテント)

今jQueryMobileの勉強を兼ねてつぶあにのスマートフォンサイトを作っているんですが、どうせならアプリと連携してみようということで調べました。

やりたいこと
・特定のURLクリック時にアプリをインストールしている場合はアプリケーション選択ダイアログが出て、ブラウザで遷移するかアプリを起動するか選べる
・アプリをインストールしていない場合は普通にページ遷移

具体的に言うと、オンエアー中のアニメのタイムラインを見に行こうとするとアプリケーションに移動するか、スマフォサイトで用意したページに行くか選べるようにしたいってこと。

まず、AndroidManifest.xmlを変更

   <activity
      android:name=".Test"
      android:label="@string/test.title">
      <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="http"
          android:host="test.tsubuani.com"
          android:pathPrefix="/live" />
      </intent-filter>
    </activity>

intent-filterにaction.View,category.DEFAULT,cateogry.BROWSABLEを追加。
dataにscheme,host,pathPrefixを追加。
schemeやhostとかはそれぞれ依存しているので注意が必要。
pathPrefixの他にも、pathやpathPatternなんてのも指定できる。
細かい仕様は下記参照。
http://www.techdoctranslator.com/android/guide/manifest/data-element

今回の例で言うと

http://test.tsubuani.com/live*******

っていうURLにアクセスしようとするとTestActivityが起動するという感じになる。

ActivityはonNewIntentに処理を書いてやればよい

  @Override
  protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    Intent intent = getIntent();
    if( intent != null ) {
      /** リンク先のURLを取得する。 */
      String data = intent.getDataString();
      if(data != null){
        //urlを元にごにょごにょ
      }
    }
  }

これで、アプリをインストールしている人はアプリで実況TLを見ることが出来るし、
そうでない人はスマフォサイトで用意したページに遷移させることが出来る。
Androidはこんな感じでアプリ同士の連携がすごい簡単に出来るのが素敵。