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の下記フィールドに設定をする必要があります。
フィールド名 | 説明 |
---|---|
ledARGB | LEDの色をARGB形式で指定します。 |
ledOnMS | LEDをONにする時間をミリ秒単位で指定します。 |
ledOffMS | LEDをOFFにする時間をミリ秒単位で指定します。 |
flags | Notificationの詳細な動作を指定するフラグを設定します。 |
たとえば青色の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の使い方になります。