ブラウザからのインテントの送信について
Androidにおいて、インテントをブラウザ上のリンクから送信する際の、その指定方法についてのメモ。
インテントの構造の基本 (1 (2
この分類は私個人の考えによるものですので、正確ではありません。ご注意下さい。
インテントが持つ情報は大きく分けて、主に次のような物で構成される。
(送信側からの視点)
データ、MIMEタイプ
データとファイル形式。データは主にURIのhost + path部で表される部分。
インテントの場合、データは実体ではなく、場所を示すリンクにしておく事が多い。スキーム(ハンドラ)、動作(action)など
インテントの受け手の動作を規定する。受け手を限定する場合にも使われる。分類(category)、componentなどのメタ情報
インテントの受け手を、受動的に限定する(選択させる余地あり)。インテントフィルタを参照。追加データ
用途がはっきりしている場合に、受け手に直接受け渡す追加データ。送信元(sourceBounds)
受け手に自分のメタ情報を渡す。ない事が多い。セレクタ、パッケージ(package)*
インテントの受け手を、能動的に限定する(選択させる余地を無くさせる目的)。
*セレクタとパッケージは、排他的にしか設定できない。
インテント送信リンク
intentスキームを持つURI(intent://...)のリンクを生成し、ユーザーに開いてもらう、あるいはスクリプトで直接そのリンクに移動させることで、ブラウザからインテントが送信される。
このリンクは、例えば、パッケージ指定でのVIEWアクション(既定)なら、
<a href="intent://host/path#Intent;package=pkg.example.ns;end">インテント送信</a>
インテント呼び出しURIの基本構成
上述のURIに指定できる、各値の意味は以下。
host/path
URI(Data)の一部として渡される。#Intent;
インテントの追加の指定の始まり。package=[namespace];
送信先のアプリケーションパッケージを限定する。action=[action];
action:動作の種類を指定する。(e.g. android.intent.action.VIEW)category=[category];
category:受け取る相手の種類を指定する。scheme=[string]; 受け渡し時のハンドラを指定する。例えば、"intent://...;scheme=myapp;.../"の場合、"myapp://.../"と指定したものと同様になる。
end;
追加の指定の終了。
Extra追加データの指定
putExtra...API等によるような、追加のデータを受け渡す場合、更に下記のような指定を加える。
...;S.extraData=mystring;B.extraFlag=true;...;end
この 'S' や 'B'は、データ種別(型)を表し、'.'の後はその識別子、'='の後はその値と続く。 [=.#:/]など、値にURI上で意味のある文字を含む場合、URIエンコード形式(%xx)にして渡す。
データ種別の記号は以下。
記号 | S | B | b | c | d | f | i | l | s |
---|---|---|---|---|---|---|---|---|---|
型 | String | Boolean | Byte | Character | Double | Float | Integer | Long | Short |
解析側実装の詳細
標準ブラウザの実装では、以下の手順でURIが解析される。(5
ハッシュ(#)の位置を確認
(なければURI全体をデータとしてインテント送信)最初が"#Intent;"で始まっているか確認
(さもなくば旧形式として解析)データ設定のループ (end;が見つかるまで)
基本: action category type launchFlags package component scheme sourceBounds
追加: S B b c d f i l s
他: SEL (以降をセレクタの設定に切り替える)セレクタ(SEL)指定があった場合、セレクタを設定
dataを設定