hyoromoのブログ

最近はVRSNS向けに作ったものについて書いています

IntentのCategoryとExtraとFlagの一覧表を作ってみたよ

前回までにActivityBroadcastのActionに関する振る舞い整理してきました。
今回は定義が広い振る舞いのフィルタリング方法である Category を整理します。
また、それ以外にも Intent に投げる際に情報を付加させる Extra や、Intent を投げた先で起動される Activity がどのように起動するかを指定できる Flag も整理します。
今回は特に意味不明な箇所が多く、正直Flagに関してはまったく分かりませんでした。
自分でも実際に検証してみますが、何かご指摘頂けるようでしたら、お願いします。

Categories

『Actionの振る舞いを明確にするためのCategory』を指定する方法を一覧表。
これらは AndroidManifest.xml ファイル内のタグ内で指定します。また、ソース内で Intent#addCategory(String) と書くのも可能です。

定数名 説明 URL
CATEGORY_DEFAULT 標準カテゴリ*1   
CATEGORY_BROWSABLE ブラウザから安全に起動することが可能であること   
CATEGORY_HOME 端末が起動されたとき、最初に起動されるものであること   
CATEGORY_LAUNCHER Home画面のアイコンから起動可能であること   
CATEGORY_INFO パッケージ情報が提供されていること   
CATEGORY_OPENABLE 必ずURIが受け渡されること   
CATEGORY_EMBED 活動中である親Activityであること   
CATEGORY_TAB TabActivity 内のタブであること   
CATEGORY_TEST テストとして使用されること*2   
CATEGORY_UNIT_TEST Unitテストとして使用されること   
CATEGORY_MONKEY Monkeyというテスト自動化ツールを走らせることが可能なこと   
CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST テストされているフレームワークであること   
CATEGORY_ALTERNATIVE ユーザーが現在参照しているデータに対し、代替できる動作が可能であること   
CATEGORY_SELECTED_ALTERNATIVE ユーザーが選択したデータに対し、代替できる動作が可能であること   
CATEGORY_PREFERENCE ???   
CATEGORY_DEVELOPMENT_PREFERENCE ???   
CATEGORY_SAMPLE_CODE サンプルと使用するために、コード化されている必要があること*3   

Extra Data

『Intentに投げるときに渡すデータの種類を示す定数』の一覧表。
ソース内で Intent#putExtra(String, Bundle)と指定します*4

定数名 説明 URL
EXTRA_EMAIL メールアドレス   
EXTRA_CC メールCC   
EXTRA_BCC メールのBCC   
EXTRA_SUBJECT メッセージの件名   
EXTRA_PHONE_NUMBER ACTION_NEW_OUTGOING_CALL*5もしくはACTION_CALL*6で掛ける電話番号   
EXTRA_STREAM ACTION_SEND*7でブロードキャストされるデータストリーム   
EXTRA_TEXT ACTION_SEND*8でブロードキャストされるテキストデータ   
EXTRA_KEY_EVENT Intentに投げるきっかけとなったKeyEvent   
EXTRA_ALARM_COUNT アラーム回数   
EXTRA_DATA_REMOVED アンインストール対象   
EXTRA_REPLACING ACTION_PACKAGE_REMOVED*9で削除するアプリケーションパッケージ   
EXTRA_DONT_KILL_APP 使用中のためACTION_PACKAGE_REMOVEDもしくはACTION_PACKAGE_CHANGEDに失敗   
EXTRA_INTENT ACTION_PICK_ACTIVITY*10で選択されたActivity   
EXTRA_TITLE ACTION_CHOOSER*11で選択されるActivity   
EXTRA_SHORTCUT_ICON Iconのショートカット   
EXTRA_SHORTCUT_ICON_RESOURCE ???   
EXTRA_SHORTCUT_INTENT Intentのショートカット   
EXTRA_SHORTCUT_NAME 名前のショートカット   
EXTRA_TEMPLATE ACTION_INSERT*12で作成されるときの初期データ   
EXTRA_UID ???   

Flags

『呼び出される側の起動する振る舞い』を指定する方法の一覧。
ソース内で setFlags(int) や addFlags(int) と指定します。

定数名 説明 URL
FLAG_FROM_BACKGROUND バックグラウンドで呼び出される   
FLAG_ACTIVITY_NEW_TASK スタックに残っていても、新しくタスクを起動させる   
FLAG_ACTIVITY_MULTIPLE_TASK FLAG_ACTIVITY_NEW_TASKと組み合わせることで、同じActivityが起動していても別Activityとして起動させる*13   
FLAG_ACTIVITY_SINGLE_TOP スタックの先頭と同Activityの場合は新しくActivityを作られず、同Activityで無い場合は新しくActivityを生成させる   
FLAG_ACTIVITY_CLEAR_TOP 呼び出すActivity以外のActivityをクリアして起動させる   
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET 呼び出すActivityとその上にあるActivityが一旦全てクリアされる   
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED スタックを全てクリアして、新しくActivityを生成させる   
FLAG_ACTIVITY_NO_HISTORY 履歴にスタックに残さず起動させる   
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY 履歴がスタックに残っているなら、そちらを利用して起動させる   
FLAG_ACTIVITY_BROUGHT_TO_FRONT ???   
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS ???   
FLAG_ACTIVITY_FORWARD_RESULT ???   
FLAG_ACTIVITY_NO_USER_ACTION ???   
FLAG_ACTIVITY_PREVIOUS_IS_TOP ???   
FLAG_ACTIVITY_REORDER_TO_FRONT ???   
FLAG_DEBUG_LOG_RESOLUTION ???   
FLAG_GRANT_READ_URI_PERMISSION ???   
FLAG_GRANT_WRITE_URI_PERMISSION ???   
FLAG_RECEIVER_REGISTERED_ONLY ???   

まとめ

これでリファレンスに乗っている Intent 情報は一通り読んだことになります。
今回は意味不明な箇所が多かったです。
それでも意味が分かった範囲で色々できると思いますし、意味不明な箇所も実際に試していく事で理解して行けると思います。

次回

次こそコーディングしていくと思います。
自分の書いたエントリが読み難い場合は修正を加えたり、新しく分かりやすいエントリを書くかもしれません。

*1:他にカテゴリを指定しない場合、カテゴリ指定漏れで無いことを表すために設定するのかな?

*2:どういったテストなのかが分からない

*3:意味不明

*4:Bundleは受け渡すデータを HashMap で格納した情報

*5:[http://d.hatena.ne.jp/hyoromo/20091002/1254498107:title=Broadcast Action]を参照にしてください

*6:[http://d.hatena.ne.jp/hyoromo/20090929/1254237656:title=Activity Acition]を参照にしてください

*7:[http://d.hatena.ne.jp/hyoromo/20090929/1254237656:title=Activity Action]を参考にしてください

*8:[http://d.hatena.ne.jp/hyoromo/20090929/1254237656:title=Activity Action]を参考にしてください

*9:[http://d.hatena.ne.jp/hyoromo/20091002/1254498107:title=Broadcast Action]を参考にしてください

*10:[http://d.hatena.ne.jp/hyoromo/20090929/1254237656:title=Activity Action]を参照にしてください

*11:[http://d.hatena.ne.jp/hyoromo/20090929/1254237656:title=Activity Action]を参考にしてください

*12:[http://d.hatena.ne.jp/hyoromo/20090929/1254237656:title=Activity Action]を参考にしてください

*13:FLAG_ACTIVITY_NEW_TASKで既にそうなのでは?