隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
          數(shù)據(jù)加載中……

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

          本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

          本文為新書《Android/OPhone 開發(fā)完全講義》的內(nèi)容連載。《Android/OPhone開發(fā)完全講義》一書現(xiàn)已出版,敬請(qǐng)關(guān)注。

          購 買:

          互動(dòng)網(wǎng)(china- pub)
          當(dāng)當(dāng)(dangdang)
          卓越亞馬遜

          《Android/OPhone開發(fā)完全講義》目錄

          源代碼下載




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

                NotificationToast都可以起到通知、提醒的作用。但它們的實(shí)現(xiàn)原理和表現(xiàn)形式卻完全不一樣。Toast其實(shí)相當(dāng)于一個(gè)組件(Widget)。有些類似于沒有按鈕的對(duì)話框。而Notification是顯示在屏幕上方狀態(tài)欄中的信息。還有就是Notification需要用NotificationManager來管理,而Toast只需要簡(jiǎn)單地創(chuàng)建Toast對(duì)象即可。

          下面來看一下創(chuàng)建并顯示一個(gè)Notification的步驟。創(chuàng)建和顯示一個(gè)Notification需要如下5步:

          1.  通過getSystemService方法獲得一個(gè)NotificationManager對(duì)象。

          2.  創(chuàng)建一個(gè)Notification對(duì)象。每一個(gè)Notification對(duì)應(yīng)一個(gè)Notification對(duì)象。在這一步需要設(shè)置顯示在屏幕上方狀態(tài)欄的通知消息、通知消息前方的圖像資源ID和發(fā)出通知的時(shí)間。一般為當(dāng)前時(shí)間。

          3.  由于Notification可以與應(yīng)用程序脫離。也就是說,即使應(yīng)用程序被關(guān)閉,Notification仍然會(huì)顯示在狀態(tài)欄中。當(dāng)應(yīng)用程序再次啟動(dòng)后,又可以重新控制這些Notification。如清除或替換它們。因此,需要?jiǎng)?chuàng)建一個(gè)PendingIntent對(duì)象。該對(duì)象由Android系統(tǒng)負(fù)責(zé)維護(hù),因此,在應(yīng)用程序關(guān)閉后,該對(duì)象仍然不會(huì)被釋放。

          4.  使用Notification類的setLatestEventInfo方法設(shè)置Notification的詳細(xì)信息。

          5.  使用NotificationManager類的notify方法顯示Notification消息。在這一步需要指定標(biāo)識(shí)Notification的唯一ID。這個(gè)ID必須相對(duì)于同一個(gè)NotificationManager對(duì)象是唯一的,否則就會(huì)覆蓋相同IDNotificaiton

          心動(dòng)不如行動(dòng),下面我們來演練一下如何在狀態(tài)欄顯示一個(gè)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"天氣預(yù)報(bào)""晴轉(zhuǎn)多云", contentIntent);
          //  第5步
          notificationManager.notify(R.drawable.icon, notification);

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

          由于創(chuàng)建和顯示多個(gè)Notification的代碼類似,因此,在本節(jié)的例子中編寫了一個(gè)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方法中已經(jīng)創(chuàng)建
              notificationManager.notify(id, notification);
          }

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

           

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

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

          在顯示Notification時(shí)還可以設(shè)置顯示通知時(shí)的默認(rèn)發(fā)聲、震動(dòng)和Light效果。要實(shí)現(xiàn)這個(gè)功能需要設(shè)置Notification類的defaults屬性,代碼如下:

           

          notification.defaults = Notification.DEFAULT_SOUND;        //  使用默認(rèn)的聲音
          notification.defaults = Notification.DEFAULT_VIBRATE;        //  使用默認(rèn)的震動(dòng)
          notification.defaults = Notification.DEFAULT_LIGHTS;        //  使用默認(rèn)的Light
          notification.defaults = Notification.DEFAULT_ALL;            //  所有的都使用默認(rèn)值

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

              如果要清除某個(gè)消息,可以使用NotificationManager類的cancel方法,該方法只有一個(gè)參數(shù),表示要清除的NotificationID。使用cancelAll可以清除當(dāng)前NotificationManager對(duì)象中的所有Notification

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

                         圖1


                          圖2


                          圖3


                         圖4

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

           





          Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺(tái)灣)

          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 銀河使者 閱讀(2710) 評(píng)論(0)  編輯  收藏 所屬分類: java 原創(chuàng)移動(dòng)(mobile)Android/OPhone

          主站蜘蛛池模板: 建始县| 枣阳市| 云和县| 新民市| 贵南县| 日土县| 大关县| 平阳县| 昌吉市| 新建县| 永登县| 兴和县| 永州市| 乃东县| 自治县| 莱州市| 大洼县| 肇州县| 磐石市| 龙泉市| 德州市| 达尔| 大兴区| 新巴尔虎右旗| 新绛县| 武威市| 聊城市| 扬中市| 定兴县| 萨迦县| 福清市| 柳州市| 长宁区| 宜兰市| 深圳市| 稻城县| 吉林市| 敦化市| 阿城市| 上饶市| 东兰县|