第499回:インテント とは

大和 哲
1968年生まれ東京都出身。88年8月、Oh!X(日本ソフトバンク)にて「我 ら電脳遊戯民」を執筆。以来、パソコン誌にて初歩のプログラミング、HTML、CGI、インターネットプロトコルなどの解説記事、インターネット関連の Q&A、ゲーム分析記事などを書く。兼業テクニカルライター。ホームページはこちら
(イラスト : 高橋哲史)


Androidでデータをやり取りする仕組み

 他のスマートフォンのOSと比較して、Androidの大きな特徴であり、なおかつ、メリットと言えるのが「インテント」です。今回紹介する「インテント」とは、Androidにおいて、アプリケーションの中の1つ1つの機能、たとえばアプリケーション同士や、アプリケーションとウィジェット、アプリケーションとシステムを橋渡しする仕組みのことです。

 「インテント」という名称が“意図”“目的”を意味する英単語「intent」から来ているように、Androidでは“アプリケーションプログラムが何をしたいか”という「意図・目的」をシステムに渡すと、システムがそれを解釈、判断し、適切な機能(アプリ)へ渡す、という構造になっています。

 たとえば、Androidで、ブラウザに表示された画像を押し続ける(ホールドする)と、どうなるでしょうか?

 画像を見たいということであれば、Androidにインストールされているアプリのうち、画像を表示できるアプリが自動的に起動して画像を表示します。それがブラウザではない、別のアプリでも画像を表示できます。複数の画像表示対応アプリがインストールされていれば、Androidのシステム側からは、ユーザーにその選択肢を表示してアプリを選べるようにします。つまり、ユーザーは、その都度好きなアプリを使って画像を選択、表示できるのです。もちろん、このとき「次回以降このアプリを使う」と指定すれば、次回以降はユーザーに意識させずに自動的にそのアプリで画像を表示させます。

 画像表示対応のアプリをインストールすればするほど、選択肢はその分増えます。つまり、ユーザーは「このアプリをインストールしたら、このソフトから使うことができるのかな?」という心配をする必要はなく、画像を表示したかったら画像表示ソフトをインストールしさえすればいいのです。

 このような操作感を実現しているのが、Androidのインテントという仕組みなのです。

インテントとは、アプリケーションとアプリケーションのデータの橋渡しをする仕組みだ。どのアプリにデータを渡せばいいかはAndroidシステムが自動的に判断する。候補が複数ある場合はユーザに選択させることもできる。アプリを追加すると、候補を増やすことも簡単に可能だ

アプリ内でもアプリ間でも同じ仕組み

 インテントは、アプリケーションとアプリケーションをつなぐ場面で特に重要な仕組みに見えます。しかし、先に述べたように、アプリケーションだけでなく、アプリケーションの中の1つ1つの機能や、アプリケーションとウィジェット、アプリケーションとシステムというように、Androidの中のさまざまな構成要素に対して橋渡しをしています。

 アプリケーション内部という意味では、たとえばAndroidのアプリケーションでは、大抵の場合、複数の画面があります。この画面を表示するためのプログラムの部品は“アクティビティ”と呼ばれるのですが、アクティビティは他のアクティビティを呼ぶときに、インテントを使います。

 「画面に“/SDcard/camera/○○○.jpg”というファイルのJPEG画像を表示してください」「(ボタンを表示するので)メッセージと、ボタンに"OK"という文字を表示してください」というようなインテントが作られると、「アクティビティ」→「システム」→「アクティビティ」という流れで処理されます。

 たとえば、先述したブラウザでの画像の場合、以下のようにインテントが使われています。

  1. ブラウザで画像がタップされる
  2. ブラウザはユーザーが何か操作をするのだと考えてインテントを作成する
      アクション:データを画面に表示する
      データ:JPEG "akiba.jpg"
  3. ブラウザはシステムにインテントを渡す
  4. システムはこれが「データを画面に表示する」インテントであると判断する。データを画像に表示するアプリが複数あればユーザーにアプリを選択させ、選択されたアプリにインテントを渡す
  5. 画像表示アプリがインテントを受け取り、表示する

 つまり、インテントが「ブラウザ」→「システム」→「アプリ」という流れで処理されているわけです

 画像表示アプリを作るときも、アプリ開発者はAndroidアプリの開発におけるガイドラインにのっとってアプリを作ればよいだけで、見たこともない世界中のアプリとの連携が実現できます。インテントという仕組みのおかげで、Androidではアプリ間のデータ連携が非常にスムーズにいくようになっているわけです。

Android 2.2からはリモートもサポート

 インテントは、以前のAndroidでは、同じ端末内でしかアクティビティにデータを渡して起動させることはできませんでしたが、バージョン2.2以降ではネットワークを使ってサーバーから端末内のアクティビティを渡すことができるようになりました。

 その仕組みは、「Cloud to Device Messaging(C2DM)」と呼ばれています。これは、Googleが運用するクラウド上のサーバーから、Android端末にインテントが配信され、端末内のシステムがそれを判断して適切なアプリケーションに流します。

 これまで、Androidにおいて“サーバーからのデータプッシュ配信”と言えばGmailやGoogleカレンダー程度でしか実現されていませんでしたが、その他のアプリケーションでも、同じようにサーバーからAndroid端末内のアプリにプッシュで送ることができるようになったわけです。

 この仕組みを使えば、ある端末内から、あるサーバーにアクセスして指令を送り、別の端末で待ち受けているアプリケーションを起動するというようなことも可能となりますので、これまでとはまた違ったAndroidの使い方も可能になるでしょう。たとえば、Androidスマートフォンから、Android搭載のテレビなどを遠隔操作する、といった応用も可能になるかもしれません。




(大和 哲)

2011/1/18 12:30