例えば, YouTubeのURLがあって,
http://www.youtube.com/watch?v=dQw4w9WgXcQ
WEBブラウザ向けにリンクを貼る場合
<a href="http://www.youtube.com/watch?v=dQw4w9WgXcQ">→ Go Movie</a>
と書く.
Android端末上では, これをクリックするとデフォルトのアプリ設定がされてない場合は暗黙的インテントが発行されて,
1. 該当アプリ選択ダイアログ
のあと,
2-a. ブラウザでYouTubeサイトの動画が表示される.
2-b. YouTubeアプリで動画が表示される.
となる.
ブラウザアプリとYouTubeアプリをインストールはほとんどの人ががインストールしているだろう.
そのリンク記述を
android-app://{package_id}[/{scheme}[/{host}[/{path}]]][#Intent;{...}]
の書式で書く. 書式内 {package_id} は必須.
<a href="android-app://com.google.android.youtube/http/www.youtube.com/watch?v=dQw4w9WgXcQ">→ Go Movie from android-app</a>
これをクリックすると, YouTubeアプリに対して明示的インテントが発行されて, 該当する動画が表示される.
これは以下をセットした明示的インテントを投げるのと等価.
Action: ACTION_VIEW Data: http://www.youtube.com/watch?v=dQw4w9WgXcQ Package: com.google.android.youtube
もし YouTube アプリをインストールしていない場合は PlayStoreアプリが起動してYouTubeアプリの画面が表示されてそのままインストールすることができる.
この書式を使うと
「該当アプリの選択」
「アプリのデフォルトの設定のクリア」
というユーザからみて煩わしい動作がなくなる上, 明示的インテントの
「該当するパッケージがみつからない」
という場合に対しての開発側の手間も省ける.
書式にあるようにこんな記述も可能.
<a href="android-app://com.example.app/ #Intent;action=com.example.MY_ACTION; i.some_int=100;S.some_str=hello;end">...
これは以下明示的インンテントと等価.
Action: com.example.MY_ACTION Package: com.example.app Extras: some_int=(int)100 some_str=(String)hello
便利だが, いつからこんなのあったんだ?
スキームはスキームなのかっ!?
注意: ブラウザ互換