第4回、第5回では、簡単なRSSリーダー「SimpleRSSReader」を題材に、Androidアプリの基本的な開発手法を解説してきた。AndroidにおけるRSSパーサの挙動を学び、アプリに実装するところまできた。

 今回は、RSSリーダーとしての体裁を整えるために、記事の要約文を表示する詳細画面をつけてみる。現在、アプリが持つアクティビティは記事を一覧表示する「RSSListActivity」一つしかないが、今回はもう一つ、詳細画面(図1)を表示するためのアクティビティ「ItemDetailActivity」を追加する。

図1●記事の要約文を表示したところ
[画像のクリックで拡大表示]

 前回実装したパースの機能を担う「parseXml」メソッドでは、title要素とdescription要素しか取得していないため、詳細画面で表示されるデータも記事のタイトルと本文だけである。

 今回新たにアクティビティを追加することで、複数のアクティビティ間での画面遷移の処理を実装する必要がでてくる。ここで、Androidアプリを開発するうえで必ず知っておかなければならない重要な概念を紹介しておこう。

Intentで画面遷移

 Androidにおいて、アクティビティ間の画面遷移の処理を担うのが、「Intent」(インテント)と呼ばれるものである。Androidのアプリ開発を進めるうえで、アクティビティとこのインテントの二つの概念は、きちんと理解しておかなければならない。

 「Intent」とは、英語で「意図」「意志」「目的」などといった意味であるが、Androidでは、複数のアクティビティ間でデータの送受信をする際に、このインテントを使う。

 インテントには明示的なものと暗黙的なものがある。前者は同一のアプリケーション内にある送信先のアクティビティクラスを明示的に指定して送信する。

 それに対して後者の場合は、アプリケーションからアクションとパラメータをシステムに送信し、その二つの組み合わせをもとに、他のアプリケーション内のどのアクティビティを起動するかをシステムが決定する。Androidに標準で用意されているダイヤルや電話帳、Webブラウザなどのアクティビティに、アプリケーションからアクセスしたい時などに、この暗黙的なインテントを利用する。

 たとえば、指定したURLをブラウザで表示したい時は、以下のようなコードを記述する。

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://itpro.nikkeibp.co.jp/"));
startActivity(intent);

 インテントの第一引数には、アクションの内容を記述し、第二引数にパラメータを指定する。パラメータはUriクラスのインスタンスとして記述し、インスタンスの生成には「Uri.parse」メソッドを使用する。

 生成したインテントを「startActivity」メソッドの引数に指定してコールすることでアクティビティを起動することができる。また、「指定したURLをブラウザで表示する」「指定した番号にダイヤルする」などの基本的な動作に対するインテントはAndroidであらかじめ定義されている。代表的な例としては、以下のようなものがある。

表●Androidであらかじめ定義されているインテントの例
アクションインテントURI説明
ACTION_VIEWhttp://web_address指定したURLをブラウザで表示する
ACTION_VIEWgeo:latitude,longitude指定した緯度・経度の位置をGoogleマップで開く
ACTION_DIALtel: phone_number指定した番号のダイヤル画面を表示する

 また、外部から受信したインテントをどう処理するかは、自分で作成したアプリケーションに登録できる。具体的には、マニフェストファイル内にある「intent-filter」要素で、受信するインテントのアクションの種類やカテゴリー、データ形式を設定する。

<intent-filter>
	<action android:name="android.intent.action.VIEW" />
	<category android:name="android.intent.category.DEFAULT" />
	<data android:scheme="foo" android:mimeType="text/html" />
</intent-filter>