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の下記フィールドに設定をする必要があります。

フィールド名説明
ledARGBLEDの色をARGB形式で指定します。
ledOnMSLEDをONにする時間をミリ秒単位で指定します。
ledOffMSLEDをOFFにする時間をミリ秒単位で指定します。
flagsNotificationの詳細な動作を指定するフラグを設定します。

たとえば青色の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の使い方になります。