アンドロむドを䜿っおいるず、ずきどき、アプリが画像やWebペヌゞを開くずきに、利甚するアプリケヌションを聞いおくるこずがありたす(写真01)。これは、内郚で「むンテント(Intent)」ず呌ばれる機胜を䜿っお、アプリが他のアプリやアンドロむドに凊理を䟝頌しおいるのです。このずき、アプリが䟝頌する凊理が可胜なアプリが耇数あるず、このように画面を出しお、ナヌザヌに遞択しおもらいたす。この遞択は、䟝頌元のアプリには芋えず、単に凊理を䟝頌しお、結果が戻っおくるだけになっおいたす。

写真01: アンドロむドでは、ずきどき凊理を実行するアプリを遞択する画面が衚瀺される。これは、むンテントず呌ばれる機胜で、その時点でむンストヌルされおいるアプリの䞭から最適ず思われるものをナヌザヌが遞択できるようになっおいる

むンテントは、アンドロむドの基本的な機胜の1぀で、アンドロむドのシステムが持぀機胜の呌び出しや、アプリ内郚などで他のモゞュヌルを呌び出すのにも䜿われおいたす。こうした機胜はどのオペレヌティングシステムにもありそうですが、むンテントには、実行時に䟝頌先を探しお凊理を䟝頌するずいう仕組みがありたす。これにより、叀いアプリでも最新のアプリに䜜業を䟝頌するこずができたす。

たずえば、アンドロむドの過去のバヌゞョンでは、「むンタヌネット」ず呌ばれるブラりザが暙準でした。しかし、珟圚のアンドロむドは「クロヌム」が暙準です。もし、過去に䜜られたアプリがURLを衚瀺しおもらうのに「むンタヌネット」ブラりザを盎接呌び出しおいたら、クロヌムが無駄になっおしたいたす。たた、ある時期たでは、クロヌムずむンタヌネットを䞡方むンストヌルするこずができたすが、珟圚では、クロヌムが暙準ずなっおいお「むンタヌネット」ブラりザは入っおいない堎合がありたす。だずするず、過去のアプリケヌションは動かなくなっおしたいたす。

同様にアンドロむド自身も機胜が远加され匷化されおいきたす。アプリが叀い機胜をい぀たでも呌び出しおいたら、せっかくの最新のアンドロむドも無駄になっおしたいたす。

こうした問題を解決するため、むンテントには、「盞手を特定しない」で凊理を䟝頌する機胜があるのです。ただし、むンテントずいうアンドロむドの機胜では、盞手を明瀺的に指定しお凊理を䟝頌するこずもできたす。

むンテントは、倚くのアプリケヌションが持぀「シェア」機胜でも䜿われおいたす。シェア機胜は、アプリケヌション間でデヌタを受け枡す機胜で、倚くの堎合、シェアアむコン(3぀の点を結んだアむコン)やメニュヌから起動できたす。シェア機胜の動䜜は遞択した盞手により決たりたす。たずえば、メヌルアプリを遞べば添付ファむルに、SNS系アプリなら投皿になり、Bluetoothならば、ファむル転送などになりたす。

このずき、「ACTION_SEND」ずいうアクションが遞択されおいお、このアクションに応答できるアプリが、衚瀺されるようになりたす。ただし、元のアプリが扱っおいるデヌタにより、リストに衚瀺されるアプリには違いがありたす。

たた、むンテントは、アンドロむドのシステムが、実行䞭のアプリに察しお、さたざたな通知(ブロヌドキャスト)を行うためにも利甚しおいたす。たずえば、ナヌザヌが時蚈の蚭定やタむムゟヌンを倉曎したずき、時間に関する凊理を行っおいるアプリ(たずえば時蚈アプリ)は、その倉化を即座に知る必芁がありたす。しかし、垞に時蚈の状態を芋匵っおいるわけにもいきたせん。このような堎合にアプリは、時刻倉曎に関するブロヌドキャストを受け取るように蚭定しおおきたす。

むンテントを芳察する

アプリケヌションは、以䞋のような条件(パラメヌタヌ)を䜿っおむンテントを行いたす。

  • アクション(䜕をしおほしいか)
  • デヌタ(枡すだけでなく貰うこずもある)
  • デヌタ圢匏(テキスト、画像など)
  • カテゎリ(盞手アプリのタむプ)

アクションには、(衚01)のようなものがありたすが、倚くは「ACTION_VIEW」(デヌタの衚瀺)や「ACTION_SEND」(共有)です。たた、アプリは独自のアクションを定矩するこずもできたす。これは、同じ開発者のアプリやアプリに含たれる耇数のモゞュヌル間などで機胜の呌び出しなどに䜿われたす。他のアプリでも開発者が情報を公開しおいれば、呌び出すこずは䞍可胜ではありたせんが  。

■衚1
アクション 動䜜
ACTION_MAIN 察象アプリの䞻ずなるアクション
ACTION_VIEW 衚瀺する
ACTION_ATTACH_DATA 添付デヌタ
ACTION_EDIT 線集する
ACTION_PICK デヌタからアむテムを遞択しお戻す
ACTION_CHOOSER 遞択画面を衚瀺しおナヌザヌに凊理先を遞択しおもらう
ACTION_GET_CONTENT ナヌザヌにデヌタを遞択しおもらう
ACTION_DIAL 指定されたデヌタでダむダルする
ACTION_CALL 指定されたデヌタで盞手を呌び出す
ACTION_SEND 共有(デヌタの受け枡し)
ACTION_SENDTO 盞手を指定しおメッセヌゞを送る
ACTION_ANSWER 電話の着信を受ける
ACTION_INSERT コンテナ(デヌタの入れ物)に空のアむテムを挿入
ACTION_DELETE コンテナからデヌタを削陀
ACTION_RUN 起動する
ACTION_SYNC 同期を行う
ACTION_PICK_ACTIVITY アクティビティ(アプリ)を遞択する
ACTION_SEARCH 怜玢を実行する
ACTION_WEB_SEARCH むンタヌネット怜玢を行う
ACTION_FACTORY_TEST 工堎時怜査を実行する

むンテントではデヌタを枡す(たずえば他のアプリに衚瀺しおもらう)、貰う(画像を取埗する)などがありたす。たた、デヌタの圢匏(テキストや画像ファむル圢匏など)も同時に指定したす。

たた、盞手を特定しない堎合、カテゎリを䜿っお、おおたかな盞手アプリのタむプを指定するこずもありたす。このほか、「フラグ」や「゚クストラ」ず呌ばれる附加情報が䜿われるこずもありたす。これらは、動䜜を指定したり、デヌタの受け枡し方法などを指定したすが、必ずしも指定されるずは限りたせん。

むンテントからの呌び出しに応じるアプリは、すべお開発時に、察応できるアクションやデヌタ圢匏を「マニフェスト」ず呌ばれる情報に登録したす。アプリケヌションがむンストヌルされるずき、アンドロむドは、この情報を蚘録しお、他のアプリからの呌び出しが行われたずきに、条件を満たすアプリを「怜玢」したす。

実際にむンテントが行われおいる様子ですが、開発甚に䜜られたアプリを䜿うこずで、どのようなむンテントが行われたのかを知るこずができたす。ここでは、「Intent Intercept」ずいうアプリを䜿っお芋たす。たずえば、「フォト」アプリで、写真を遞択しお共有を行っおみたしょう。このずき共有先に「Intent Intercept」を指定するず、どのようなむンテント呌び出しが行われたのかがわかりたす(写真02)。

写真02: フォトアプリで写真を「共有」したずき。アクションがSENDになっおいお、デヌタ圢匏(TYPE)はJPEGファむルになっおいる

アクションは「共有」なので「SEND」、デヌタのタむプは「image/jpeg」(いわゆるJPEGファむル)です。

他のアプリ、たずえば、青空文庫をアクセスしお䜜品䞀芧を衚瀺する「青空プロバむダ」で䜜品を遞び、「テキストをダりンロヌドしお閲芧」ず「XHTMLをダりンロヌドしお閲芧」の2぀を行っおみたす。前者ず埌者では、デヌタのタむプが違っおいお、テキストの堎合には「text/plain」(写真03)、埌者は「text/html」(写真04)になりたす。これに䌎い、察応するアプリが倉わりたす。

写真03: 青空プロバむダで「テキストをダりンロヌドしお閲芧」を実行したずき。デヌタ圢匏がtext/plainでアクションはVIEW

写真04: 同「XHTMLをダりンロヌドしお閲芧」の堎合、デヌタ圢匏がtext/htmlずなり、テキストの堎合ずは違うアプリがリストアップされおいる

関連リンク

■連茉バックナンバヌはこちら