最近看《第一行代碼》中關于通知Notification的部分琅拌,書中的例子在現在的Android studio中已經是不提倡奸柬,推薦用Builder代替,于是簡單的試了試Notification.Builder持灰,簡單總結一下丁屎。
利用Notification.Builder獲取Notification類的實例
Notification.Builder的簡單用法如下:
Notification.Builder builder = new Notification.Builder(MainActivity.this);
builder.setTicker("This is a trcker");//通知欄的預覽文字
builder.setSmallIcon(R.mipmap.xxx);//圖標
builder.setContentTitle("This is title");//通知的標題
builder.setCOntentText("This is content");//通知的內容
builder.setWhen(System.currentTimeMillis());//設置通知時間為當前系統(tǒng)時間
Notification notification = builder.build();//獲取Notification的實例
以上是一個簡單的安卓通知樣式,沒什么好說的呼股,setWhen()方法默認顯示通知發(fā)出的時間耕魄,不寫也可以。
利用NotificationManager發(fā)出通知
我們可以利用getSystemService( )方法來啟動通知管理器彭谁。然后利用通知管理器的notify( )方法發(fā)出通知.notify( )方法有兩個參數吸奴。第一個參數int類型是通知的編號,一般來說每個通知不同即可缠局,第二個參數即上邊我們構造的notification實例则奥。
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, notification);
通知的清除可以在活動中用manager.cancel(1)來清除。
manager.cancel(1);
通知的高級用法
一般來說狭园,notification和builder都可以設置通知的鈴聲提示燈和振動读处,這里我稍微寫寫builder的幾個方法,notification的用法差不多唱矛,可以看《第一行代碼》
builder.setVibrate(new long[] {0, 1000, 1000, 1000});//為通知設置震動,4個時間參數崩瓤,單位為毫秒。
//第1個參數是延遲振動時間布蔗,第2個是振動時間,第3個是靜止時間粥脚,第4個是靜止后又振動的時間
//上邊這個振動就是收到通知后,手機立刻振動1秒包个,停止振動1秒刷允,接著再振動1秒。
Uri soundUri = Uri.fromFile("路徑");
builder.setSound(soundUri);//設置指定路徑下的通知提示音
builder.setDefaults(Notification.DEFAULT_ALL);//通知的提示音鈴聲振動全部采用系統(tǒng)默認值碧囊。
//也可以單獨設定Notification.DEFAULT_LIGHTS或Notification.DEFAULT_SOUND或Notification.DEFAULT_VIBRATE
//設置默認后恃锉,自定義的鈴聲和振動都無效。
通知的點擊事件
通知的點擊事件通過PendingIntent類實現呕臂。
- 首先新建個PendingIntent的實例
Intent intent = new Intent(this, NoticeActivity.class);//點擊通知后啟動NoticeActivity
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
//4個構造參數,第1個是Context肪跋,第2個一般用不到歧蒋,寫0
//第3個就是上一行的intent,第4個是PendingIntent的行為模式州既,一般用PendingIntent.FLAG_CANCEL_CURRENT
2.利用builder添加PendingIntent實例
builder有三個不同的添加PendingIntent的方法:
builder.setContentIntent(pi);
builder.setDeleteIntent(pi);
builder.setFullScreenIntent(pi, true);
第一個方法就是最常用的谜洽,點擊通知后進入新的活動。
第二個方法是用戶清除通知后觸發(fā)吴叶,進入新的活動阐虚。
第三個方法類似來電,收到通知后立刻在當前屏幕顯示蚌卤,這個方法顯示的通知按照上邊的寫法無法啟動NoticeActivity活動实束,原因我也不清楚= =,所以一般推薦用第一個方法添加PendingIntent逊彭。
另外咸灿,通知點擊后默認不會自動清除,需要在NoticeActivity用manager.cancel(1)這個方法清除侮叮,或者在Notification里添加如下flag:
notification.flags = Notification.FLAG_AUTO_CANCEL;//點擊通知后避矢,通知會自動清除
notification.flags = Notification.FLAG_NO_CLEAR;//這個FLAG讓用戶無法手動清除通知,只能去點擊囊榜。