An intent is an abstract description of an operation to be performed.
android.content.Intent
概要
俺の意思。
まずインテントは「意思」という意味だ、念のため。
Intentはaction
とdata
という2つの情報で
やりたい操作を抽象化したもの だといえる。
例えばaction
が「編集する(ACTION_EDIT
)」で、
data
がcontent://contacts/people/1
だったら、
電話帳のIDが1のデータを編集したい!
ってことだろう。
こんな感じの「やりたい!」を、
あるActivityに渡したり、Android端末中に撒き散らしたりできる。
意思の情報。
Intentが持つのはaction
、data
だけではない。
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を受け取りやがる。