《Android/OPhone開發完全講義》連載(5):Notification與狀態欄信息
本文為新書《Android/OPhone 開發完全講義》的內容連載。《Android/OPhone開發完全講義》一書現已出版,敬請關注。
購 買:
互動網(china- pub)
當當(dangdang)
卓越亞馬遜
《Android/OPhone開發完全講義》目錄

上一篇:Android SDK中常用命令行工具(二)
Notification與Toast都可以起到通知、提醒的作用。但它們的實現原理和表現形式卻完全不一樣。Toast其實相當于一個組件(Widget)。有些類似于沒有按鈕的對話框。而Notification是顯示在屏幕上方狀態欄中的信息。還有就是Notification需要用NotificationManager來管理,而Toast只需要簡單地創建Toast對象即可。
下面來看一下創建并顯示一個Notification的步驟。創建和顯示一個Notification需要如下5步:
1. 通過getSystemService方法獲得一個NotificationManager對象。
2. 創建一個Notification對象。每一個Notification對應一個Notification對象。在這一步需要設置顯示在屏幕上方狀態欄的通知消息、通知消息前方的圖像資源ID和發出通知的時間。一般為當前時間。
3. 由于Notification可以與應用程序脫離。也就是說,即使應用程序被關閉,Notification仍然會顯示在狀態欄中。當應用程序再次啟動后,又可以重新控制這些Notification。如清除或替換它們。因此,需要創建一個PendingIntent對象。該對象由Android系統負責維護,因此,在應用程序關閉后,該對象仍然不會被釋放。
4. 使用Notification類的setLatestEventInfo方法設置Notification的詳細信息。
5. 使用NotificationManager類的notify方法顯示Notification消息。在這一步需要指定標識Notification的唯一ID。這個ID必須相對于同一個NotificationManager對象是唯一的,否則就會覆蓋相同ID的Notificaiton。
心動不如行動,下面我們來演練一下如何在狀態欄顯示一個Notification,代碼如下:
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// 第2步
Notification notification = new Notification(R.drawable.icon, "您有新消息了", System.currentTimeMillis());
// 第3步
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, getIntent(), 0);
// 第4步
notification.setLatestEventInfo(this, "天氣預報", "晴轉多云", contentIntent);
// 第5步
notificationManager.notify(R.drawable.icon, notification);
上面的5行代碼正好對應創建和顯示Notification的5步。在這里要解釋一下的是notify方法的第1個參數。這個參數實際上表示了Notification的ID。是一個int類型的值。為了使這個值唯一,可以使用res目錄中的某些資源ID。例如,在上面的代碼中使用了當前Notification顯示的圖像對應的資源ID(R.drawable.icon)作為Notification的ID。當然,讀者也可以使用其他的值作為Notification的ID值。
由于創建和顯示多個Notification的代碼類似,因此,在本節的例子中編寫了一個showNotification方法來顯示Notification,代碼如下:
{
Notification notification = notification = new Notification(resId, tickerText, System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, getIntent(), 0);
notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);
// notificationManager是在類中定義的NotificationManager變量。在onCreate方法中已經創建
notificationManager.notify(id, notification);
}
下面的代碼使用showNotification方法顯示了3個Notification消息。
"數學100分、語文99分、英語100分,yeah!", R.drawable.smile, R.drawable.smile);
showNotification("這是為什么呢?", "這道題為什么會出錯呢?", "誰有正確答案啊.",
R.drawable.why, R.drawable.why);
showNotification("今天心情不好", "也不知道為什么,這幾天一直很郁悶.", "也許應該去公園散心了",
R.drawable.why, R.drawable.wrath);
在顯示Notification時還可以設置顯示通知時的默認發聲、震動和Light效果。要實現這個功能需要設置Notification類的defaults屬性,代碼如下:
notification.defaults = Notification.DEFAULT_VIBRATE; // 使用默認的震動
notification.defaults = Notification.DEFAULT_LIGHTS; // 使用默認的Light
notification.defaults = Notification.DEFAULT_ALL; // 所有的都使用默認值
如果要清除某個消息,可以使用NotificationManager類的cancel方法,該方法只有一個參數,表示要清除的Notification的ID。使用cancelAll可以清除當前NotificationManager對象中的所有Notification。
運行本節的例子,單擊屏幕上顯示Notification的按鈕,會顯示如圖1所示的消息。每一個消息會顯示一會,然后就只顯示整個Android系統(也包括其他應用程序)的Notification(只顯示圖像部分)。如圖2所示。如果將狀態欄拖下來,可以看到Notification的詳細信息和發出通知的時間(也就是Notification類的構造方法的第3個參數值),如圖3所示。當單擊【清除通知】按鈕,會清除本應用程序顯示的所有Notification,清除后的效果如圖4所示。
圖1
圖2
圖3
圖4
下一篇:為TextView組件加上邊框
《Android高薪之路:Android程序員面試寶典 》http://book.360buy.com/10970314.html
新浪微博:http://t.sina.com.cn/androidguy 昵稱:李寧_Lining
posted on 2010-07-13 08:20 銀河使者 閱讀(2705) 評論(0) 編輯 收藏 所屬分類: java 、 原創 、移動(mobile) 、Android/OPhone