Notificationを使ってステータス通知する


Androidには画面上部にステータスバーという領域がありますが、
ノーティフィケーションというしくみを使うことでこのステータスバーの領域にメッセージを表示することができます。
用途としては、画面が表示されていないアクティビティやバックグラウンドで動作しているサービスが
ユーザに何らかの情報を伝えたい場合に使用します。

詳細は続きからどうぞ。

ノーティフィケーションを使用するにはNotificationManagerクラスのnotifyメソッドに
Notificationクラスのインスタンスを渡して呼び出します。
notifyメソッドの引数にはノーティフィケーションを識別するidとノーティフィケーションのインスタンスを渡します。
実際には以下のようなコードになります。

private NotificationManager mManager;
private int number = 0;

private void sendNotification() {
  mManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
  Notification n = new Notification();
  Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:1234567890"));
  PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);

  n.icon = R.drawable.coda;
  n.tickerText = "NotificationSample";
  n.number = number;

  n.setLatestEventInfo(getApplicationContext(), "NotificationSample", "It calls it.", pi);

  mManager.notify(number, n);
  number++;
}

上に示したsendNotificationメソッドをボタンなどから呼び出すとノーティフィケーションのインスタンスnを生成し、
notifyメソッドにこのインスタンスnを指定して呼び出すことでノーティフィケーションが送信されます。

mManager.notify(number, n);

ちなみにここで指定しているnumberは、ノーティフィケーションの識別子です。
たとえばメールなど繰り返し通知されるようなノーティフィケーションの場合、
個別の識別子を持つことで各ノーティフィケーションを識別することができます。

ノーティフィケーションの詳細

ステータスバーをドラッグすると、ノーティフィケーションの詳細が表示されます。

ここで表示されている個々のノーティフィケーションのタイトルや詳細、アイコンなどは上記コードの

n.icon = R.drawable.coda; // アイコン
n.tickerText = "NotificationSample"; // ステータスバーに表示されるティッカー文字列
n.number = number; // ステータスバー上のアイコンに重ねて表示される文字列

n.setLatestEventInfo(getApplicationContext(), "NotificationSample", "It calls it.", pi);

の部分で指定しています。
特にn.numberについては、メール受信などのような繰り返し通知されるようなノーティフィケーションの場合、
受信したメール数として表示されるので便利です。

インテントの設定

ノーティフィケーションの詳細画面から個々のノーティフィケーションをクリックすると、
予め設定してあるインテントが発行されます。
今回のサンプルの場合はIntent.ACTION_DIALを指定しているので、
ノーティフィケーションをクリックすると電話アプリが起動します。

Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:1234567890"));
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);

ここで任意のインテントを指定することで、ノーティフィケーションに関連する
アプリを呼び出すことができます。

関連する記事:

No Comments