2014年2月8日土曜日

Intent

An intent is an abstract description of an operation to be performed.
android.content.Intent

概要

俺の意思。

まずインテントは「意思」という意味だ、念のため。

Intentはactiondataという2つの情報で
やりたい操作を抽象化したもの だといえる。

例えばactionが「編集する(ACTION_EDIT)」で、
datacontent://contacts/people/1だったら、
電話帳のIDが1のデータを編集したい!
ってことだろう。

こんな感じの「やりたい!」を、
あるActivityに渡したり、Android端末中に撒き散らしたりできる。

意思の情報。

Intentが持つのはactiondataだけではない。

  • category
  • type
  • component
  • extras

この中で重要なのはextrasだ。
基本的には相手に渡したい情報をextrasへ突っ込んでいくことになる。

たとえば「メールを送りたいんです!」というインテントだったら、
extrasにはメールの題名や本文が入っているのだろうね。

渡せ。

渡す方法も大切。

Activityを立ち上げたかったら、
startActivityを使って渡す。

ブロードキャストりたかったら、
sendBroadcastを使って渡す。

例えばブロキャスればレシーバが勝手に反応してくれる。
actionの値を見て、自分が処理すべき情報かを見極めている。
「それだったら俺やりまっせー」
みたいなことだ。

干渉を防げ。

actionは文字列なんです。
だから他のプロセス(VM)でも比較できるわけ。

で、Intentを撒き散らしちゃう時に
actionの値としてACTION_WRITEとか設定しちゃうと、
他のアプリも同じ値のactionを投げてきそうじゃん。
そしたら間違って受け取っちゃう。

だから自分の アプリオリジナル☆ なインテントを作るときは、
com.oreno.package.name.ACTION_WRITEみたいな名前にしようぜ、
ってGoogleは言ってる。

はっきりせい

  • 暗黙的なインテント「メール送りたいんです!」
  • 明示的なインテント「Gmailさん!メール送りたいんです!」

暗黙的なインテント はアニメタイトルっぽいけどアニメタイトルではない(随筆時)
Implicitが暗黙的、Explicitが明示的だ。

ここでは 明示的=相手を指定している と言い換えられる。
中二病的な名前が付いているだけなのでGoogleにも
そっち系の人がいるということだろう。よかったね。

IntentFilter

マニフェストに書いとくと、そのIntentを受け取りやがる。