2010年8月12日木曜日

インテントとインテントフィルタ

Intentには明示的なインテントと暗黙的なインテントの2種類存在する。
参考:Intents and Intent FiltersのIntent Resolution

明示的なインテント
コンポーネント名を指定されたインテント。通常は、同一アプリ内のActivityを起動するために使用する。Intent(Context packageContext, Class<?> cls) など、コンテキストとクラスオブジェクトを指定してインスタンスを生成する。

明示的なインテントは、インテントフィルタは使用せずに、指定されたコンポーネント名で解決される。同一アプリケーション内のActivityを起動するだけなら、Actionなどは設定不要。

暗黙のインテント
コンポーネント名を指定しないインテント。通常は、他アプリへのインテントなど、コンポーネント名が事前に判らない場合に使用される。

暗黙のインテントは、インテントフィルタを用いて解決される。

インテントフィルタ
そのActivityを起動できるインテントを制限する。

インテントのAction・Category・Dataの内容を指定し、指定された内容のインテント以外はActivityを起動できないようにする。

インテントフィルタは、AndroidManifest.xml内に<intent-filter>で<action><category><data>を組み合わせて設定する。<action><category><data>は複数指定可能。また、<intent-filter>自体も複数指定可能。

主なインテント定数
参考:Intent

・ACTION.MAIN
データのやり取りをせずに、単にActivityを起動する。

・ACTION.VIEW
データを表示する。データはIntentに含まれるURIで指定される。

・Category.LAUNCHER
ランチャから起動可能

・Category.DEFAULT
参考:Note Pad ExampleのDEFAULTの解説

下記2つの例外を除き、全てのインテントに設定されているカテゴリ。暗黙のインテントを受け取る場合は、必ずフィルタに入れる。

- 明示的なインテント
- ACTION.MAIN と Category.LAUNCHER の組み合わせ

ACTION.MAIN と Category.LAUNCHER
参考:アクティビティとタスク

ランチャから起動可能なアクティビティに設定されるフィルタ。タスクのエントリポイントとなる。
この組み合わせが指定された場合は、起動モードはSingleTaskかSingleInstanceに設定することが望ましい。起動モードがDefaultかSingleTopの場合、ランチャから起動されるたびに新しいタスクが起動されてしまうため。

0 件のコメント:

コメントを投稿