狀態列通知(Status Bar Notifications)
狀態列表徵圖把一個表徵圖添加到系統的狀態列(帶有一個可選的文本提醒訊息),並且還在通知視窗中添加一個通知訊息。當使用者選擇這個通知時,Android系統會觸發一個由通知定義的Intent對象(通常是要啟動一個Activity)。你也能夠在裝置上給通知配置聲音、震動、螢幕閃爍等效果來提醒使用者。
狀態列通知應該用於後台服務需求使用者響應有關事件的情境中。為了接受使用者的互動,後台服務不應該自己啟動Activity。相反,服務應該建立一個狀態列通知,當使用者選擇這個通知時,才啟動對應的Activity。
圖1在狀態列的左側顯示一個帶有通知表徵圖的狀態列。
圖1.帶有通知的狀態列
圖2顯示通知視窗中的通知訊息。
圖2.通知視窗
基礎
Activity或Service對象能夠初始化一個狀態列通知。因為Activity僅能夠在前台運行且視窗有焦點時才能執行操作,所以通常是由Service對象來建立狀態列通知。這種方式下,當使用者正在使用另一個應用程式或裝置休眠時,通知也能夠從後台建立。要建立通知,必須使用兩個類:Notification和NotificationManager。
使用Notification類的一個執行個體來定義狀態列通知的屬性,如狀態列表徵圖、通知訊息,以及另外的如播放聲音的設定等。NotificationManager對象是Android系統的服務,它執行和管理所有狀態列通知。你不需要直接執行個體化NotificationManager對象。為把通知發給它,必須用getSystemService()方法獲得NotificationManager對象的引用,然後再想要通知使用者的時候,用notify()方法把Notification對象傳遞給它。
以下是建立一個狀態列通知的方法:
1. 獲得NotificationManager對象的引用:
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
2. 初始化Notification對象:
int icon = R.drawable.notification_icon;
CharSequence tickerText = "Hello";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
3. 定義通知訊息和PendingIntent對象:
Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
4. 把Notification對象傳遞給NotificationManager:
privatestaticfinalint HELLO_ID
=1;
mNotificationManager.notify(HELLO_ID,
notification);
到此為止,使用者已經收到通知了。