このページの本文へ

これで作れる! Androidのアプリケーション 第5回

インテントによるアプリケーションとアクティビティの呼出し

2010年07月29日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

Androidアプリのキモとなるインテントとは何?

 では本題に入ることにしましょう。「インテント」とはAndroid独自の機能です。簡単にいえばアプリケーションやアクティビティを呼び出す機能ですが、他のアプリケーションを機能や扱えるデータ型式で“検索”して呼び出すことができるものです。

 たとえば、ウェブブラウザーを呼び出したい場合、「View」(データの表示)というアクションとURLを指定します。ウェブブラウザーの名前などを指定する必要がありません。このインテントが実行されると、Androidは、URLを扱うことができ、かつそれを表示できるアプリケーションを探し、そのアプリケーションにURLを渡して表示を行なわせます。もし、複数のアプリケーションがある場合は、ユーザーがどのアプリケーションを使うのかを選ぶダイアログが表示されます。

Android端末で追加のウェブブラウザーをインストールしたのちに、何らかのアプリケーションでURLをタッチすると、アプリの選択画面が表示される。これはインテントによって、ウェブブラウザーを呼び出している証拠だ

 このようにアプリケーションでインテントを使うと、コード中にブラウザーの名前を入れる必要もないし、実際の実行時に別のブラウザーに置き換わっていたり、複数のブラウザーが端末にあっても問題ないのです。また逆にブラウザを起動するアプリケーションがあったとしても、ユーザーは別のブラウザをインストールしたら、そちらを起動するようにも指定できます。このようにアプリケーション同士を直接相互依存させるのではなく、実際に行なう作業(アクションといいます)を指定して外部のアプリケーションと間接的に関係させることができるわけです。

 また、インテントは1つのアプリケーションの中で、アクティビティを切り替えるのにも利用します。アプリケーションは、必ずアクティビティを含むため、インテントはアクティビティを呼び出しているともいえます。つまり、アプリケーション内での別のアクティビティの呼び出しは、インテントの特殊な形と考えることができるわけです。この場合は、機能などでなく、直接別のアクティビティを示す名前を使います。

 インテントによる別アプリケーションの呼び出しでは、Android側がアプリケーションの情報を使って、自動的に起動するアプリケーションを決定します。このため自作ソフトでも、きちんとアクションに対応するように作れば、条件を満たしたときには自作ソフトを呼び出してくれます。

まずは簡単な例を作成してみる

 今回は、このためにSample5を作成しました。いつものようにエクスポートしたプロジェクトを用意しました。またAndroidマーケットに動作するサンプル(Sample05)をアップロードしてあります。またソースコードについては以下のリンクからダウンロードしてください。

Sample05.zip

 なおこれままでの解説で、アプリケーションの作り方に慣れたと思いますので、今回からはレイアウト作成などの操作についての説明は省略します。

 インテントの最も簡単な例は、アプリケーションから別アプリケーションを呼び出す場合です。まずはAndroidの[設定]にある「日付と時間」を表示させてみましょう。

 Android自身が用意しているインテントに関しては、Android DeveloperのReferenceに情報があります。ただし、一ヵ所にすべてまとまっているわけではなく、Intentクラスで規定する標準のアクションと、個々のクラスが持つアクション(アクティビティの表示)に別れています。今回のように設定関連のアクションは、Settingsクラスに定義があります。

    Intent intent = new Intent(Settings.ACTION_DATE_SETTINGS);
    startActivity(intent);

 1行目はIntentオブジェクトの作成で、このとき引数としてアクションを渡します。今回のアクション(Settings.ACTION_DATE_SETTINGS)は、データを別途必要としないので、特になにもせずにstartActivityでアクティビティを表示させることができます。

 これがインテントです。このように設定の各項目を簡単に起動することができます。本連載で最終的に作る世界時計のプログラムにおいても、最初はこの機能を使い、ユーザーに自分でタイムゾーンを変更してもらっていました。この方法はユーザーの手間がかかってしまうものの、アプリケーションがタイムゾーンを変更する許可(Permission)を取得する必要がないというメリットがあります。

 Androidマーケットからアプリケーションをインストールする際、オレンジの字でアプリケーションがアクセスする機能などについての確認をみたことがあるでしょう。これがその許可になります。ここでOKを押すことで、ユーザーはさまざまな機能へのアクセス(関連情報の変更や読み出し)を許可しているのです。

 さて、このコードでIntentのコンストラクタの引数になっている定数(Settings.ACTION_DATE_SETTINGS)は実は文字列で、リファレンスによれば、その中身は"android.settings.DATE_SETTINGS"です。このためこの部分は、

    Intent intent = new Intent("android.settings.DATE_SETTINGS");

と書くこともできます。とはいえ、将来的にもこの文字列である保証はない(変更されることはないと思われますが)ので、最初のようにコードでは定数として書いておいたほうがいいでしょう。万一変更があっても、定数はSDK側で定義されているのでコードを再コンパイルするだけで済みます。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン