Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中通知欄的使用

Android中通知欄的使用

編輯:關於Android編程

Hi,眾猿們,今天講講安卓中通知的使用:

什麼是通知:安卓系統用戶發送消息的一種方式,當通知發出後,會出現在系統的通知欄上,當用戶點擊通知時,會進入到相應的界面(想象下當有新短信到來時的情況),一個默認的通知包含的內容為:[通知包含的內容]

通知的基本使用方式:其代碼如下(一般定義在上下文對象(如Activity)中):

 //獲得通知管理器,通知是一項系統服務
 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
 //初始化通知對象 p1:通知的圖標 p2:通知的狀態欄顯示的提示 p3:通知顯示的時間
 Notification notification = new Notification(R.drawable.ic_launcher, "提醒", System.currentTimeMillis());
 //點擊通知後的Intent,此例子點擊後還是在當前界面
 Intent descIntent = new Intent(this, MainActivity.class);
 PendingIntent intent = PendingIntent.getActivity(this, 0, descIntent, 0);
 //設置通知信息
 notification.setLatestEventInfo(this, "提醒", "祝您天天快樂", intent);
 notification.flags|=Notification.FLAG_AUTO_CANCEL; //當查看後,自動消失
 notification.defaults |= Notification.DEFAULT_SOUND;//默認聲音提示
 //發送通知,
 manager.notify(0, notification);
 

從上面這段代碼中我們可以看出通知編程中主要涉及到兩個象:Notification和NotificationManager,下面咱們來一一接介紹對象:

Notification:通知對象,我們希望展示一個什麼樣的通知,都要通過該對象來實現

1.創建一個通知對象:調用其構造方法即可,其參數列表為:

int icon :通知的圖標資源的id號

CharSequence tickerText:通知發出且用戶還未下拉通知欄時通知在通知欄上展示的信息

long when :通知的發出時間

2.setLatestEventInfo方法:設置通知攜帶的信息,其參數列表為:

Context context :創建通知的對象,可以是Activity、Service等

CharSequence contentTitle:用戶下拉通知後顯示的標題

CharSequence contentText:用戶下拉通知後顯示的內容

PendingIntent contentIntent:用戶點擊通知後要完成的動作(如啟動Activity等),該動作會延時完成,且不是通知的創建者(同時也是PendingIntent對象的創建者)來完成,因此要使用PendingIntent對象而不用Intent對象

3.sound字段:Uri類型的對象,設置通知發出時的聲音

4.vibrate字段:int類型的數組,設置通知發出時的震動策略,如當該值為:{0,100,200,300}時,即可表示: 0毫秒後開始振動,振動100毫秒後停止,再過200毫秒後再次振動300毫秒

5.設置通知發出時指示燈的閃亮情況,需使用以下字段:

ledARGB :十六進制int型值,表示指示燈的顏色,如:0xff00ff00;

ledOnMS :一個周期內指示燈亮的時間

ledOffMS:一個周期內指示燈滅的時間

我們可以看到,設置通知發出時的提示聲音、震動情況和指示燈閃爍都是通過對Notification對象中字段進行賦值來完成的,我們甚至可以通過對Notification中的字段進行賦值來設置通知的界面(自定義通知的界面將在下面講),設置點擊通知後的動作等,具體應該對哪些字段賦值,眾猿們可以自行查閱,本猿猿就不細說了,接下來再說說幾個字段:

6.flags:int型值,設置通知的其它屬性,其值可以是Notification對象中的如下靜態常量:

FLAG_AUTO_CANCEL:在通知欄上點擊此通知後自動清除此通知

FLAG_INSISTENT:重復發出聲音,直到用戶響應此通知

FLAG_ONLY_ALERT_ONCE:發起通知後,鈴聲和震動均只執行一次

FLAG_ONGOING_EVENT:將此通知放到通知欄的"Ongoing"即"正在運行"組中,他們通常是用來表示一個後台任務,用戶積極參與(如播放音樂)或以某種方式正在等待,因此占用設備(如一個文件下載,同步操作,主動網絡連接)

FLAG_NO_CLEAR:表明在點擊了通知欄中的"清除通知"後,此通知不清除,經常與FLAG_ONGOING_EVENT一起使用

FLAG_SHOW_LIGHTS:設置通知發出時會使用指示燈,我們要設置通知發出時指示燈的閃亮情況時必須對flags設置該值,

當我們需要對flags設置多個值時,每個值之間要用|隔開

7.defaults:設置通知的那些屬性將采用默認值,這時我們對這些屬性的其它設置將失效,其值可以是Notification對象中的如下靜態常量:

DEFAULT_SOUND:設置通知使用默認的提示音

DEFAULT_VIBRATE:設置通知使用默認的震動方式

DEFAULT_LIGHTS:設置通知使用默認的指示燈效果

DEFAULT_ALL:設置通知全部使用默認效果

此外,Notification對象中還有一個property字段,用於設置通知的優先級,沒什麼鳥用,大家了解就行

NotificationManager:通知的管理對象,負責發送通知

1.獲取NotificationManager對象:調用Context對象的getSerivce方法,需傳入Context對象的靜態常量:NOTIFICATION_SERVICE作為參數

2.notify方法:發送一個通知,其參數為:

int id:為被發送的通知指定一個id

Notification notification:需要被發送的通知對象

其實呢,android系統還為我們提供另外一種創建Notification對象的方法,即:使用NotificationCompat中的Builder對象,知道觀察者設計模式的猿猿們一看這個肯定就懂,本猿猿就不多說了,

自定義通知的布局:通知被發送時,其在通知欄上都會有一個默認的布局,但有時這個默認的布局並不能滿足我們的要求,這是我們就要為通知自定義布局了:

了解RemoteViews對象:該對象代表一個其它進程中的視圖對象,我們都知道View是當前線程中的視圖對象,而當我們需要為其它進程(如:通知是運行在系統進程中的,並不在當前進程中,因此其布局視圖也不屬於當前進程,再如桌面上的懸浮窗,其布局視圖也不屬於當前進程)中的對象創建視圖時,就用用到RemoteViews對象,說到這兒大家就都能明白通知的布局視圖是一個RemoteViews吧,因為我們要先了解一下該對象:

1.將布局文件映射為RemoteViews對象:調用RemoteViews對象的構造函數即可,即參數列表為:

String packageName:當前進程的包名,調用Context對象的getPackageName()方法即可獲得

int layoutId : 需映射的布局文件的資源id號

2.RemoteViews對象屬於其它進程,因此其僅支持FrameLayout、LinearLayout、RelativeLayout三種布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper這些顯示控件,其布局文件中也不能出現其它控件

3.為RemoteViews對象的布局文件中的控件設置文字、背景圖片等屬性:可以直接在布局文件中為控件指定屬性,當需要我們在代碼中設置時要調用RemoteViews中的如下方法:

setImageViewResource :為布局文件中的ImageView控件設置圖片資源

setTextViewText:為布局文件中的TextView控件設置文字

RemoteViews對象中還有很多類似的方法,它們都用來為布局文件中的控件設置屬性的,且它們的參數基本上相同,第一個參數是控件的id,第二個是該屬性的值

4.為RemoteViews對象的布局文件中的控件設置點擊事件:從上面來看我們不能通過RemoteViews對象找到某一個控件,因此如果要為控件設置點擊事件的話我們需要借助RemoteViews對像的方法:setOnClickPendingIntent(即需要借助PendingIntent對象來實現我們點擊控件後需要完成的動作),其參數列表為:

int viewId:需要設置點擊事件的控件的id

PendingIntent pendingIntent:該對象封裝了我們點擊控件後需要完成的動作,一般我們會創建一個用於啟動廣播接收者的PendingIntent對象,在廣播接收者中處理我們的點擊事件(也就是說我們還要再自定義一個廣播接收者用於處理點擊事件,所需的數據通過PendingIntent攜帶)

接下來再讓我們回到服務:有時我們需要知道服務的工作情況(如開啟服務完成下載工作,需要將下載進度通知給用戶),這是我們就可以為服務設置一個長駐通知欄的通知,用於顯示工作情況,要達到該效果,只要我們在服務中創建一個常駐通知欄的Notification並調用服務的startForeground方法即可,其參數列表為:

int id:通知的id

Notification notification:需被顯示的通知

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