libro
www.tuyano.com
Google androidプログラミング入門

GUI、再び! (7/7)

作成:2010-06-19 15:42
更新:2010-06-19 15:43

■情報バーにノーティフィケーションを表示する

例えばマーケットからアプリをインストールしたりすると、一番上にあるアイコンなどが表示されているバーに「○○がインストールされました」と表示されたりしますね。そして、一番上のバーをドラッグして引き下げると、アイコンとメッセージが表示されます。これは、Android独特のインターフェイスです。

この一番上にあるバーは「情報バー(ステータスバー)」というものです。ここに、システムからのメッセージなどが表示されるのですね。そして引き出すと現れるメッセージの類いは「ノーティフィケーション(通知)」と呼ばれるものです。

この情報バーに表示されるメッセージとノーティフィケーションはセットになっています。これらは以下のようなクラスを利用します。

NotificationManager――ノーティフィケーション全体を管理するクラスです。
Notification――ノーティフィケーションのクラスです。このクラスを作成し、NotificationManagerに組み込みます。
PendingIntent――ノーティフィケーションとして表示されるインテントです。

この3つのクラスの扱いを中心に頭に入れておく必要があります。では、サンプルを見ながら説明しましょう。下のリストは、ボタンをクリックすると情報バーにメッセージを表示するサンプルです。バーをドラッグして引き下ろすと、「sample Notify!」というノーティフィケーション項目が表示されます。これをクリックすると、SampleAppが起動し表示されます。では、以下に流れを整理しましょう。

1.NotificationManagerの取得
NotificationManager manager =(NotificationManager)
                getSystemService(Context.NOTIFICATION_SERVICE);
まずは、ノーティフィケーション全体を管理するNotificationManagerを取得します。これは、Activityの「getSystemService」メソッドで行います。引数に、NOTIFICATION_SERVICEを指定することでNotificationManagerが得られます。

2.必要な情報の準備
int icon = R.drawable.icon;
CharSequence msg = "情報バーに表示する!";
long when = System.currentTimeMillis();
ノーティフィケーション作成に必要な情報を用意します。まず、表示するアイコンのリソース。ここでは、とりあえずR.drawable.iconでアプリのデフォルトアイコンを使っています。そして、情報バーに表示するメッセージと、現在のタイムスタンプの値です。

3.Notificationの作成
Notification notification = new Notification(icon, msg, when);
ノーティフィケーションを作成します。これは、new Nofiricationで作ることができます。引数には、先ほどのアイコン、メッセージ、現在のタイムスタンプの値を渡します。

4.フラグの設定
notification.flags = Notification.FLAG_AUTO_CANCEL;
作成したNotificationの挙動を設定します。ここではflagsFLAG_AUTO_CANCELを設定しています。これで、ノーティフィケーションをタップしたら、自動的にキャンセルされ、一覧から消えるようになります。

5.PendingIntentの作成
Intent nIntent = new Intent(this, SampleApp.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, nIntent, 0)
;PendingIntentを作成します。これは、PendingIntent.getActivityメソッドで用意します。引数には、Content、リクエストコード番号、インテント、フラグといったものが渡されます。リクエストコードとフラグはいずれもゼロでOKです。またContextthisでよいでしょう。

問題は、インテントです。これは、new Intentで作成しておきます。ここでは、引数にthisSampleApp.classを指定して、指定のコンポーネントのインテントを作成しています。こうして作成したIntentを引数にしてPendingIntentを作成します。

6.必要な値の準備
Context context = getApplicationContext();
CharSequence title = "sample Notify!";
CharSequence content = "これがノーティフィケーションだ!";
ノーティフィケーションとして引き出しに表示される内容として必要な値を用意しておきます。Context、タイトルのテキスト、本文のメッセージテキストなどです。

7.イベント情報の設定
notification.setLatestEventInfo(context, title, content, pIntent);
setLatestEventInfo」で、Notificationにイベント情報を設定します。用意しておいた値をそれぞれ引数に渡しておきます。

8.ノーティフィケーションの実行
manager.notify(1, notification);
これで準備完了です。後は、「notify」を呼び出して、ノーティフィケーションを表示させるだけです。引数には、ID番号とPendingIntentを渡します。これでPendingIntentの設定内容に従ってノーティフィケーションのためのインテントが起動され、情報バーにメッセージが表示されます。

後は? 後は、そのまま放っておくだけです。ユーザーの操作に応じて、PendingIntentに組み込んでおいたインテントが起動したり、タップされたノーティフィケーションが自動的にキャンされ一覧から消えたりしてくれます。けっこういくつもクラスを組み合わせてややこしそうですので、実際に試して動かしてみてください。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package jp.tuyano;

import android.app.*;
import android.content.*;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class SampleApp extends Activity
		implements OnClickListener {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button btn = (Button)this.findViewById(R.id.btn);		
		
		btn.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		NotificationManager manager =(NotificationManager)
				getSystemService(Context.NOTIFICATION_SERVICE);
		int icon = R.drawable.icon;
		CharSequence msg = "情報バーに表示する!";
		long when = System.currentTimeMillis();

		Notification notification = new Notification(icon, msg, when);
		notification.flags = Notification.FLAG_AUTO_CANCEL;
		Intent nIntent = new Intent(this, SampleApp.class);
		PendingIntent pIntent = PendingIntent.getActivity(this, 0, nIntent, 0);

		Context context = getApplicationContext();
		CharSequence title = "sample Notify!";
		CharSequence content = "これがノーティフィケーションだ!";
		notification.setLatestEventInfo(context, title, content, pIntent);
		manager.notify(1, notification);
	}
}

※関連コンテンツ

「Google androidプログラミング入門」に戻る