隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
          數據加載中……

          《Android/OPhone開發完全講義》連載(5):Notification與狀態欄信息

          本文為原創,如需轉載,請注明作者和出處,謝謝!

          本文為新書《Android/OPhone 開發完全講義》的內容連載。《Android/OPhone開發完全講義》一書現已出版,敬請關注。

          購 買:

          互動網(china- pub)
          當當(dangdang)
          卓越亞馬遜

          《Android/OPhone開發完全講義》目錄

          源代碼下載




          上一篇:Android SDK中常用命令行工具(二)

                NotificationToast都可以起到通知、提醒的作用。但它們的實現原理和表現形式卻完全不一樣。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對象是唯一的,否則就會覆蓋相同IDNotificaiton

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

          //  第1步
          NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
          //  第2步
          Notification notification = new Notification(R.drawable.icon, "您有新消息了", System.currentTimeMillis());
          //  第3步
          PendingIntent contentIntent = PendingIntent.getActivity(this0, getIntent(), 0);
          //  第4步
          notification.setLatestEventInfo(this"天氣預報""晴轉多云", contentIntent);
          //  第5步
          notificationManager.notify(R.drawable.icon, notification);

              上面的5行代碼正好對應創建和顯示Notification5步。在這里要解釋一下的是notify方法的第1個參數。這個參數實際上表示了NotificationID。是一個int類型的值。為了使這個值唯一,可以使用res目錄中的某些資源ID。例如,在上面的代碼中使用了當前Notification顯示的圖像對應的資源IDR.drawable.icon)作為NotificationID。當然,讀者也可以使用其他的值作為NotificationID值。

          由于創建和顯示多個Notification的代碼類似,因此,在本節的例子中編寫了一個showNotification方法來顯示Notification,代碼如下:


          private void showNotification(String tickerText, String contentTitle, String contentText, int id, int resId)
          {
              Notification notification 
          = notification = new Notification(resId, tickerText, System.currentTimeMillis());
              PendingIntent contentIntent 
          = PendingIntent.getActivity(this0, getIntent(), 0);
              notification.setLatestEventInfo(
          this, contentTitle, contentText, contentIntent);
              
          //  notificationManager是在類中定義的NotificationManager變量。在onCreate方法中已經創建
              notificationManager.notify(id, notification);
          }

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

           

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

          其中第2個和第3Notification使用的是同一個IDR.drawabgle.why),因此,第3Notification會覆蓋第2Notification

          在顯示Notification時還可以設置顯示通知時的默認發聲、震動和Light效果。要實現這個功能需要設置Notification類的defaults屬性,代碼如下:

           

          notification.defaults = Notification.DEFAULT_SOUND;        //  使用默認的聲音
          notification.defaults = Notification.DEFAULT_VIBRATE;        //  使用默認的震動
          notification.defaults = Notification.DEFAULT_LIGHTS;        //  使用默認的Light
          notification.defaults = Notification.DEFAULT_ALL;            //  所有的都使用默認值

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

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

              運行本節的例子,單擊屏幕上顯示Notification的按鈕,會顯示如圖1所示的消息。每一個消息會顯示一會,然后就只顯示整個Android系統(也包括其他應用程序)的Notification(只顯示圖像部分)。如圖2所示。如果將狀態欄拖下來,可以看到Notification的詳細信息和發出通知的時間(也就是Notification類的構造方法的第3個參數值),如圖3所示。當單擊【清除通知】按鈕,會清除本應用程序顯示的所有Notification,清除后的效果如圖4所示。

                         圖1


                          圖2


                          圖3


                         圖4

          下一篇:
          為TextView組件加上邊框

           





          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          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

          主站蜘蛛池模板: 伊金霍洛旗| 张掖市| 定边县| 潢川县| 贵阳市| 西平县| 澄江县| 曲麻莱县| 东莞市| 静宁县| 寻甸| 宝坻区| 灯塔市| 苏尼特左旗| 门头沟区| 林州市| 唐河县| 五指山市| 东乡族自治县| 五大连池市| 治县。| 奈曼旗| 廊坊市| 镇巴县| 来宾市| 晋宁县| 德保县| 石狮市| 贵阳市| 桦川县| 阳东县| 岚皋县| 寿宁县| 雅安市| 望都县| 肇东市| 郎溪县| 桐城市| 休宁县| 沂源县| 南城县|