Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android學習指南之十九:Android Notification(通知)詳解

Android學習指南之十九:Android Notification(通知)詳解

編輯:關於android開發

       Notification(通知)使你的應用程序能夠在不使用Activity的情況下警示用戶。它是看不見的程序組件(Broadcast Receiver,Service和不活躍的Activity)警示用戶有需要注意的事件發生的最好途徑。Notification是由NotificationManager(系統服務)統一管理的。

       Notification與Toast都可以起到通知、提醒的作用。但它們的實現原理和表現形式卻完全不一樣。Toast其實相當於一個組件(Widget)。有些類似於沒有按鈕的對話框。而Notification是顯示在屏幕上方狀態欄中的信息。還有就是Notification需要用NotificationManager來管理,而Toast只需要簡單地創建Toast對象即可。

       創建並顯示Notification的步驟

       下面來看一下創建並顯示一個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的應用實例

       心動不如行動,下面我們來演練一下如何在狀態欄顯示一個Notification,代碼如下:

Java代碼
  1. //  第1步   
  2. NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);   
  3. //  第2步   
  4. Notification notification =   
  5. new Notification(R.drawable.icon, "您有新消息了", System.currentTimeMillis());   
  6. //  第3步   
  7. PendingIntent contentIntent = PendingIntent.getActivity(this, 0, getIntent(), 0);   
  8. //  第4步   
  9. notification.setLatestEventInfo(this, "天氣預報", "晴轉多雲", contentIntent);   
  10. //  第5步   
  11. 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,代碼如下:

Java代碼
  1. private void showNotification(String tickerText, String contentTitle, String contentText, int id, int resId)   
  2. {   
  3.     Notification notification = notification =   
  4.           new Notification(resId, tickerText, System.currentTimeMillis());   
  5.     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, getIntent(), 0);   
  6.     notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);   
  7.     //  notificationManager是在類中定義的NotificationManager變量。在 onCreate方法中已經創建   
  8.     notificationManager.notify(id, notification);   
  9. }  

       下面的代碼使用showNotification方法顯示了3個Notification消息。

Java代碼
  1. showNotification("今天非常高興", "今天考試得了全年級第一",   
  2.         "數學100分、語文99分、英語100分,yeah!", R.drawable.smile, R.drawable.smile);   
  3. showNotification("這是為什麼呢?", "這道題為什麼會出錯呢?", "誰有正確答案啊.",   
  4.         R.drawable.why, R.drawable.why);   
  5. showNotification("今天心情不好", "也不知道為什麼,這幾天一直很郁悶.", "也許應該去公園散心了",   
  6.         R.drawable.why, R.drawable.wrath);  

       其中第2個和第3個Notification使用的是同一個ID(R.drawabgle.why),因此,第3個Notification會覆蓋第2個Notification。在顯示Notification時還可以設置顯示通知時的默認發聲、震動和Light效果。要實現這個功能需要設置Notification類的defaults屬性,代碼如下:

Java代碼
  1. notification.defaults = Notification.DEFAULT_SOUND;        //  使用默認的聲音   
  2. notification.defaults = Notification.DEFAULT_VIBRATE;        //  使用默認的震動   
  3. notification.defaults = Notification.DEFAULT_LIGHTS;        //  使用默認的Light   
  4. notification.defaults = Notification.DEFAULT_ALL;            //  所有的都使用默認值  

       注意:設置默認發聲、震動和Light的方法是setDefaults。該方法與showNotification方法的實現代碼基本相同,只是在調用notify方法之前需要設置defaults屬性(defaults屬性必須在調用notify方法之前調用,否則不起作用)。在設置默認震動效果時還需要在AndroidManifest.xml文件中通過<uses-permission>標簽設置android.permission.VIBRATE權限。

       如果要清除某個消息,可以使用NotificationManager類的cancel方法,該方法只有一個參數,表示要清除的Notification的ID。使用cancelAll可以清除當前NotificationManager對象中的所有Notification。

       運行本節的例子,單擊屏幕上顯示Notification的按鈕,會顯示下圖所示的消息。

 Android Notification

       每一個消息會顯示一會,然後就只顯示整個Android系統(也包括其他應用程序)的Notification(只顯示圖像部分)。如下圖所示。

 Android Notification

       如果將狀態欄拖下來,可以看到Notification的詳細信息和發出通知的時間(也就是Notification類的構造方法的第3個參數值),如下圖所示。

 Android Notification的詳細信息

      當單擊【清除通知】按鈕,會清除本應用程序顯示的所有Notification,清除後的效果如下圖所示。

 Android Notification清除後的效果

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved