Notificationは、アンドロイドにしかない機能でiphoneではない機能ですが、何か情報をアプリ側からユーザーにプッシュして教えてあげたい時に画面の左上にアイコンがあり、メニューの部分が指で下に下ろせると思うのですがその中に表示ができる部分の事がnotificationです。
一見複雑そうに見えるのですが、下記のステップに分けて紹介します。
/*—————–
もくじ
—————-*/
■step1:NotificationManagerを取得
■step2:Notificationを作成
■step3:クリックで呼び出すクラスの決定
■step4:呼び出すクラスの登録
■step5:notificationに、設定
■step6:起動
/*——————————————
■step1:NotificationManagerを取得
——————————————*/
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
getSystemServiceでは、システムを取得する事ができ、WIFIの情報なども取得ができるようです。
今回利用するのは、NOTIFICATION_SERVICEのデータを取得する必要があります。
/*—————————————-
■step2:Notificationを作成
—————————————*/
Notification notification = new Notification(R.drawable.icon,"通知情報が届きました",System.currentTimeMillis());
notificationといえば、アイコンと通知用文言がひつようです。最後の引数に関しては、whenとの事で、表示させる時間を
いれるようです。(未確認ですが)現在の時間(currentTimeMillis)をいれておけば問題ないはずです。
/*———————————————
■step3:クリックで呼び出すクラスの決定
——————————————*/
Intent intent = new Intent(this,TestActivity.class);
/*———————————–
■step4:呼び出すクラスの登録
———————————*/
PendingIntent contentIntent =PendingIntent.getActivity(this, 0, intent, 0);
ここで使用されているgetActivityに関しては、
第二引数はrequestCodeですが、現在のところ、必要はないようです。
第4引数に関してですが、http://d.hatena.ne.jp/hyoromo/20091003/1254590170#20091003fn13
にいくつかクラスを呼び出すFlagが乗っていて、
Flagsを入れてもよいのですが、特に必要なければ0をいれておきます。
/*———————————–
■step5:notificationに、設定
———————————-*/
notification.setLatestEventInfo(getApplicationContext(),"アプリ名","通知情報の説明文",contentIntent);
上記で通知用の文言は決定しているのですが、ここで決める値は、メニューに表示される部分になります。
/*—————-
■step6:起動
—————*/
notificationManager.notify(R.string.app_name, notification);
ここで注意しておきたいのは、第一引数に固有の値を入れるという事。
固有の値を入れる事で、後ほど、通知の消去に利用できます。
上記で、Notificationに、アイコンが出現しました。
クリックもできると思うのですが、
/*————————————————-
※通知のアイコンが押しても通知のアイコンが消えません。
————————————————–*/
他のアプリだと結構デフォルトで消えてくれてるので、勝手に消えるものだと思うと、少し痛い目を見ます。
通知消去のボタンを押せば消えるのですが、アプリを呼び出した時に消えるような実装をしたいと思います。
上記で、TestActivityを呼び出しているのですが。TestActivityのonCreateで、通知の削除をします。
/*————–
通知削除
——————*/
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.cancel(R.string.app_name); }
これで通知が削除できました。先ほど、notificationの発行時に、固有の値を設定していたので、その値を読み込むだけです。
(cancelに関しては、全てのnotificateを消すcancelAll()がありますが、無関係なものも消してしまいます。)
上記の形で消去もできました。
/*————-
補足::使用中
————-*/
また、下記のプロパティを設定すると、
notificationに表示した状態で、
notification.flags = Notification.FLAG_ONGOING_EVENT;
とすると、通知削除のボタンを押しても通知された状態が消えません。アプリ側からのキャンセルをしない限り存在してくれるので、使用中と言うより在中という方がイメージが近いかもしれません。
少し面倒でしたが以上です。
参考:Androidのド肝