狀態欄通知(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);
到此為止,用戶已經收到通知了。