一. Notification的介紹佈局
普通視圖:
ui
Content title 標題this
Large icon 大圖標 (若是不設置,這小圖標會自動應用到大圖標上)spa
Content text 內容code
Content info 顯示有多少條信息對象
Small icon 小圖標事件
Time 時間 能夠調用 setWhen() 設置,若是爲默認的話,則是系統默認時間(通常不用設置就是系統默認時間)get
大視圖:string
大視圖只比普通視圖多了一個7it
注意:在設置Notification 時 1 ,3 ,5 這三個屬性是不可省略的
肯定進度的進度條通知:
不肯定進度的進度條通知:
自定義視圖的通知:
二 . 建立普通視圖的Notification
建立一個Notification 首先須要用到兩個包:Notification 或V4包中的 NotificationCompat 和 NotificationManager(消息管理器)
1.新建一個Notification對象
之前的方法是直接 new Notification(); 如今通常用 Notification 中的一個內部靜態類 Notification.Builder
NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 這裏用的是 v4 中的類,有助於程序向下兼容
2.設置Notification的屬性
builder.setContentTitle("新的短消息") //設置通知標題
.setContentText("晚上的課你還上不上?") //設置內容
.setSmallIcon(R.drawable.ofm_feedback_icon) //設置小圖標,若是不設置大圖標那麼,小圖標就會變成大圖標
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)) //設置大圖標
.setNumber(5) //通知的數據 ,即上圖中的第5項
.setSound(Uri.parse("/storage/sdcard0/ttpod/song/bb.mp3")) //設置聲音
.setVibrate(new long[]{0,400,200,500}) //設置震動,{不震動的時間,震動持續時間,不震動的時間,震動持續時間。。。}
.setTicker("你有新的短消息") //如圖通知發送後會先在 這個位置彈出Ticker和小圖標
.setDefaults(Notification.DEFAULT_ALL) //設置默認的聲音,閃光燈,震動 , 就是用系統默認的設置
.setOngoing(true); //設置是否爲常駐通知,若是是則用戶手動是沒法清除的,必須由程序清除,好比關閉程序時自動清除
.setAutoCancel(true); //設置爲自動清除,若是設置了單擊通知事件的話;即單擊通知後,通知會自動清除,前提是設置了通知的點擊事件
3.爲通知設置點擊後的事件
這裏要用到一個類:PendingIntent 它其中封裝的是一個延遲的Intent
首先建立一個 Intent 對象 :Intent intent = new Intent(this,MainActivity2.class);
而後獲取一個PendingIntent 對象並將Intent傳入 :
PendingIntent pi = PendingIntent.getActivity(this,3,intent,PendingIntent.FLAG_UPDATE_CURRENT);
//這裏getActivity表示獲取的是一個能夠開啓一個Activity的 PendingIntent ,還能夠getBroadcast,getService
builder.setContentIntent(pi); 將PendingIntent設置進去
4.獲取通知管理器NotificationManager
通知管理器是系統提供的,所以不管在什麼時候何地獲取的NotificationManager對象都是同一個對象
獲取NotificationManager :
NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
NotificationManager的主要方法:
notify(int id,Notification n) 發送一個通知,併爲其添加一個id
cancel(String tag,int id) 清除一個通知,經過id,tag 是一個標記能夠不用寫
cancelAll(); 清除全部的通知
Notification n = builder.build(); 經過builder 獲取Notification對象
notificationManager.notify(5,n) 發送通知
三.建立大視圖的Notification
若是要設置大視圖的Notification 只需將如下代碼加入上訴步奏便可
注意:大視圖 只有在Android 4.1 版本之後才支持(4.1也不支持)
//設置寬視圖內容
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); 獲取大視圖風格
String[] events = {"string","string","string"}; 大視圖的內容
for (int i=0;i<events.length;i++){
inboxStyle.addLine(events[i]); 將內容分行添加
}
builder.setStyle(inboxStyle); 設置風格
四.建立肯定進度的進度條的Notification
進度條通知就是不斷的發送Id相同的通知,不斷的更新這個通知,若是id相同的話會覆蓋上一個通知
其餘步奏和普通視圖是同樣的只要 添加一個 set.Progress(int i, int j , boolean b);
i 表示總進度,j表示當前進度,b 表示是否爲不肯定的進度條模式
下圖是模擬下載進度條通知:
五.建立不肯定進度的進度條通知
其餘步奏和普通視圖同樣,只需添加這個屬性便可
builder.setProgress(0,0,true);
六.建立自定義視圖的通知
自定義視圖須要用到一個遠程視圖類:RemoteViews
首先建立一個佈局文件,做爲通知的佈局,注意高度不能超過256dp
而後建立RemoteViews 並將 本身的佈局傳入
再用builder.setContent(RemoteViews r); 將RemoteViews 設置進去
在自定義視圖中 setContentTitle() 和 setContentText() 都不起做用