特定の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はこんな感じでアプリ同士の連携がすごい簡単に出来るのが素敵。