Notificationを使ってステータスバーに情報を表示する / Getting Started


Notification(ノーティフィケーション)とはAndroidの画面上部に配置されているステータスバー上に
表示することができるメッセージのことを指します。

Activityを持たずにバックグラウンドで動作するサービスなどはNotificationを使うことで
ユーザに情報を通知することができます。

Notificationにはテキストメッセージを含め、以下のような設定をすることができます。

  • テキストメッセージ
  • アイコン
  • バイブレーション
  • LED

Notificationを使うのに重要となるメソッドは以下の通りです。

メソッド名説明
ContextクラスのgetSystemService()NotificationManagerやLocationManagerなど、Androidの各種サービスのインスタンスを取得するときに使用します。
NotificationクラスのsetLatestEventInfo()Notification詳細画面の表示設定を行う。
NotificationManagerクラスのnotify()生成したNotificationを通知する。

続きからこれらのメソッドの詳しい使い方について紹介します。

Notificationの生成と設定

まず、Notificationクラスを使ってNotificationを生成します。

Notification n = new Notification(); // Notificationの生成

生成したNotificationに設定を行います。
以下のように、Notification通知時にステータスバー上に表示されるアイコンとメッセージを設定します。

n.icon = R.drawable.coda; // アイコンの設定
n.tickerText = "This is a notification message..."; // メッセージの設定

Notificationの通知後にステータスバーを引き延ばすと下図のようにNotificationの詳細情報を
確認することができます。

ここで表示する情報はsetLatestEventInfoメソッドを使って設定します。
具体的には以下のようにします。

// PendingIntentの生成
Intent i = new Intent(getApplicationContext(), NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);

// 詳細情報の設定とPendingIntentの設定
n.setLatestEventInfo(getApplicationContext(), "TITLE", "TEXT", pi);

詳細情報をクリックしたときの動作をPendingIntentで設定することができます。
上の例ではNotificationの呼び出し元のActivityが呼ばれるように設定しています。

Notificationの通知

生成したNotificationを実際にステータスバー上に通知するにはNotificationManagerクラスを利用します。
NotificationManagerはNotificationを管理するクラスです。
Notificationの通知や通知のキャンセルが行えます。

Notificationクラスのインスタンスを取得するにはgetSystemServiceメソッドを使います。

NotificationManager nm = 
   (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

インスタンスを取得したらnotifyメソッドで先ほど作成したNotificationを通知することができます。

nm.notify(1, n); // 生成したNotificationを通知する

第1引数にはNotificationの識別子、第2引数には生成したNotificationを設定します。
Notificationの識別子は通知のキャンセル時に指定することができます。

バイブレーション設定

Notificationの通知時にバイブレーションを使うことができます。
デフォルトのバイブレーションパターンのほか、独自のバイブレーションパターンを指定することもできます。

デフォルトのバイブレーションパターンを指定するには以下のように
defaultsフィールドDEFAULT_VIBRATEを追加します。

n.defaults |= Notification.DEFAULT_VIBRATE; // デフォルトのバイブレーションを設定する

独自のバイブレーションパターンを指定するには以下のように、long型の配列をvibrateに設定します。

long[] vibrate_ptn = {0, 100, 300, 1000}; // 独自バイブレーションパターン
n.vibrate = vibrate_ptn; // 独自バイブレーションパターンを設定

配列の各要素には0番目にバイブレーションを開始するまでの時間を、
それ以降はバイブレーションONとバイブレーションOFFの時間を交互に指定します。
(設定できる時間単位はミリ秒です)

LED設定

Notificationの通知と同時に端末のLEDを点滅させることでユーザに情報の通知が行えます。
LEDもバイブレーションと同様に、デフォルトの点滅パターンと独自の点滅パターンを設定することができます。

デフォルトの点滅パターンを設定するにはdefaultsフィールドDEFAULT_LIGHTSを追加します。

notification.defaults |= Notification.DEFAULT_LIGHTS;

また、独自の点滅パターンを設定するにはNotificationの下記フィールドに設定をする必要があります。

DatePickerDialogの大事なメソッド

DatePickerDialogを使う際には以下のメソッドを使いこなすことがポイントとなります。
メソッド・インターフェース説明
DatePickerDialog.OnDateSetListenerDatePickerDialog の内容が変更されたときに呼び出されるリスナー
OnDateSetListener.onDateSet()設定ボタンが押された時に呼び出されるメソッド
DatePickerDialog.show()作成したDatePickerDialogを表示するためのメソッド。これが無いと、せっかく設定してもDatePickerDialogが表示されません

たとえば青色のLEDを点滅させようとした場合には以下のようになります。

n.ledARGB = 0xff0000ff; // LEDを青色に点滅させる
n.ledOnMS = 3000; // 点灯する時間は3000ミリ秒
n.ledOffMS = 1000; // 消灯する時間は1000ミリ秒
n.flags |= Notification.FLAG_SHOW_LIGHTS; // LED点灯のフラグを追加する

サンプルプログラム

それではサンプルプログラムを紹介しましょう。
下記のサンプルプログラムはボタンを押すことでNotificationを生成し、ステータスバー上に通知を行います。

@Override
public void onClick(View v) {
	if (v.getId() == R.id.button1)
		sendNotification();
}

private void sendNotification() {
	Notification n = new Notification(); // Notificationの生成
	n.icon = R.drawable.coda; // アイコンの設定
	n.tickerText = "This is a notification message..."; // メッセージの設定

	Intent i = new Intent(getApplicationContext(), NotificationActivity.class);
	PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);
	n.setLatestEventInfo(getApplicationContext(), "TITLE", "TEXT", pi);

	long[] vibrate_ptn = {0, 100, 300, 1000}; // 独自バイブレーションパターン
	n.vibrate = vibrate_ptn; // 独自バイブレーションパターンを設定
	
	n.defaults |= Notification.DEFAULT_LIGHTS; // デフォルトLED点滅パターンを設定

	// NotificationManagerのインスタンス取得
	NotificationManager nm =
			(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
	nm.notify(1, n); // 設定したNotificationを通知する
}

ボタンを押すとNotoficationが以下のようにステータスバー上に通知されます。

設定したアイコンなどの情報はNotificationの詳細画面に反映されます。

以上が基本的なNotificationの使い方になります。

関連する記事: