歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android中通知的使用-----Notification詳解

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

 

         一般來說, 一個Notification應該傳送的消息包括:

                 1 、一個狀態條圖標        

                 2、在拉伸的狀態欄窗口中顯示額外的信息和啟動一個Application的Intent 

                 3、閃燈或LED

                 4、電話震動 

 

         在狀態欄(Status Bar)中,通知主要有兩類(使用FLAG_標記,後面講解到):

 

                 1、正在運行的事件

                 2、通知事件 

 

     Notification圖解如下:

 

               

             

 Notification類介紹:

         常量

              //表示發送一個Notification的所攜帶的效果

             DEFAULT_ALL              使用默認字段

             DEFAULT_LIGHTS       默認閃光

             DEFAULT_SOUND      默認聲音(uri,指向路徑)

             DEFAULT_VIRATE       默認震動

 

          PS:以上的效果常量可以累加,即通過mNotifaction.defaults |=DEFAULT_SOUND   (有些效果只能在真機上才有,比如震動)

            //設置Flag位

            FLAG_AUTO_CANCEL           該通知能被狀態欄的清除按鈕給清除掉

            FLAG_NO_CLEAR                  該通知能被狀態欄的清除按鈕給清除掉

            FLAG_ONGOING_EVENT      通知放置在正在運行

 

    常用字段:

           contentIntent                 設置PendingIntent對象,點擊時發送該Intent

           flags                                  設置flag位,例如FLAG_NO_CLEAR等

           defaults                             添加效果

           tickerText                        顯示在狀態欄中的文字

           when                               發送此通知的時間戳

           icon                                  設置圖標

 

    常用方法介紹

       void setLatestEventInfo(Context context , CharSequence contentTitle,CharSequence  contentText,PendingIntent contentIntent)   

           

        功能: 顯示在拉伸狀態欄中的Notification屬性,點擊後將發送PendingIntent對象

        參數: context             上下文環境

                      contentTitle      狀態欄中的大標題

                      contentText      狀態欄中的小標題

                      contentIntent    點擊後將發送PendingIntent對象

 

        另外的就是Notification的幾步不同構造方法了,其構造方法的參數含義如上,請參考SDK 。

 

    注意:當我們創造了一個Notification對象時,一定要為其設置setLatestEventInfo()方法,否則程序會報錯 .

 

 

前面我們說過,NotificationManager是所有Notification的大管家,它的主要職責是加入/移除Notification。

NotificationManager類

   通過獲取系統服務來獲取該對象:

      NotificationManager mNotificationManager = (NotificationManager)getSystemServic(Context.NOTIFICATION_SERVICE) ;

 

  常用方法:

        public  void cancelAll()                  移除所有通知         (只是針對當前Context下的Notification)

        public  void cancel(int id)              移除標記為id的通知 (只是針對當前Context下的所有Notification)

        public  void notify(String tag ,int id, Notification notification)              將通知加入狀態欄, 標簽為tag,標��為id

        public  void notify(int id, Notification notification)                                 將通知加入狀態欄,,標記為id

 

Demo如下:

簡單的寫一個Notification的類,對通知上面所講解的知識有一定的認知 。

  1.             
  2.   
  3. package com.qin.notification;  
  4.   
  5. import Android.app.Activity;  
  6. import android.app.Notification;  
  7. import android.app.NotificationManager;  
  8. import android.app.PendingIntent;  
  9. import android.content.Context;  
  10. import android.content.Intent;  
  11. import android.os.Bundle;  
  12. import android.util.Log;  
  13. import android.view.View;  
  14. import android.view.View.OnClickListener;  
  15. import android.widget.Button;  
  16.   
  17. public class MainActivity extends Activity implements OnClickListener  
  18. {   
  19.      private Button btnNotify;  
  20.      private Button btnCancel;  
  21.   
  22.      private static int NOTIFICATION_ID = 0 ;  
  23.   
  24.       /** Called when the activity is first created. */  
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState)  
  27.     {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.main);  
  30.         btnNotify = (Button) findViewById(R.id.btnNotify);  
  31.         btnCancel = (Button) findViewById(R.id.btnCancel);  
  32.         btnNotify.setOnClickListener(this) ;  
  33.         btnCancel.setOnClickListener(this) ;  
  34.    }  
  35.   @Override  
  36.   public void onClick(View v)  
  37.   {  
  38.       switch (v.getId())  
  39.         {  
  40.          case R.id.btnNotify:  
  41.              showNotification();  
  42.              break;  
  43.          case R.id.btnCancel:  
  44.              removeNotification();  
  45.              break;  
  46.          default:  
  47.                 break;  
  48.   
  49.        }  
  50.   }  
  51.     // 顯示一個通知   
  52.     private void showNotification()  
  53.     {  
  54.       // 創建一個通知   
  55.       Notification mNotification = new Notification();  
  56.   
  57.       // 設置屬性值   
  58.        mNotification.icon = R.drawable.icon;  
  59.       mNotification.tickerText = "NotificationTest";  
  60.       mNotification.when = System.currentTimeMillis(); // 立即發生此通知   
  61.   
  62.        // 帶參數的構造函數,屬性值如上   
  63.        // Notification mNotification = = new Notification(R.drawable.icon,"NotificationTest", System.currentTimeMillis()));   
  64.   
  65.       // 添加聲音效果   
  66.         mNotification.defaults |= Notification.DEFAULT_SOUND;  
  67.   
  68.        // 添加震動,由於在我的真機上會App發生異常,估計是Android2.2裡的錯誤,略去,不添加   
  69.         // mNotification.defaults |= Notification.DEFAULT_VIBRATE ;    
  70.   
  71.        //添加狀態標志    
  72.   
  73.         //FLAG_AUTO_CANCEL          該通知能被狀態欄的清除按鈕給清除掉   
  74.         //FLAG_NO_CLEAR                 該通知能被狀態欄的清除按鈕給清除掉   
  75.         //FLAG_ONGOING_EVENT      通知放置在正在運行   
  76.         //FLAG_INSISTENT                通知的音樂效果一直播放   
  77.         mNotification.flags = Notification.FLAG_INSISTENT ;  
  78.   
  79.       // 設置setLatestEventInfo方法,如果不設置會App報錯異常   
  80.        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
  81.       //注冊此通知    
  82.        // 如果該NOTIFICATION_ID的通知已存在,不會重復添加,只是播放相應的效果(聲音等)   
  83.   
  84.       mNotificationManager.notify(NOTIFICATION_ID, mNotification);  
  85.   
  86.   }  
  87.   
  88.      
  89.   
  90.    private void removeNotification()  
  91.   
  92.    {  
  93.   
  94.        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
  95.   
  96.        // 取消的只是當前Context的Notification   
  97.   
  98.       mNotificationManager.cancel(NOTIFICATION_ID);  
  99.    }  
  100.   
  101.  }  
  102.   
  103. }  
Copyright © Linux教程網 All Rights Reserved