什麼是通知(Notification):
當某個app希望向用戶發出一些提示性信息,而又不在前臺運行時,可以藉助通知實現。
發出一條通知後,手機最上方狀態欄會顯示一個通知的圖標,下拉狀態欄可以看到通知的詳細內容。
通知的基本用法:
通知可以在活動Activity 廣播接收器Receiver服務Service 中創建。
但主要在Receiver和Service中創建,因爲一般只有當程序進入到後臺時,我們才需要使用通知。
使用通知的詳細步驟:
首先需要NotificationManager對通知進行管理:調用Context類的getSystemService()方法獲取NotificationManager對象。
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
得到NotificationManager後,我們需要創建Notification對象。這個對象存儲通知所需的各種信息。
Notification的有參構造函數接收三個參數:
1.通知的圖標;
2.ticker內容(它會在系統狀態欄一閃而過)
3.指定通知被創建的時間,毫秒爲單位。
Notification notification = new Notification(R.drawable.a, "this is ticker text",System.currentTimeMillis());
創建好Notification對象後,我們需要對它的佈局進行設定:
Notification的setLatestEventInfo()方法接收4個參數,分別爲:
1.Context
2.Title
3.Message
4.暫時傳入null,更多內容見本篇下面PendingIntent。
notification.setLatestEventInfo(this, "title", "text", null);
最後一步,調用NotificationManager的notify()方法就可以讓通知顯示出來啦!
notify()方法接收兩個參數:
1.id,int類型參數
2.Notification對象。
notificationManager.notify(1, notification);
============================快樂的分割線========================================
在這裏雖然我們的通知創建好了,但是卻發現點擊是沒有反應的!
如果你用過Android手機,你一定覺得這是無法忍受的事情。
接下來我們爲通知實現點擊效果吧。
新的概念:PendingIntent
PendingIntent與Intent有些類似。它們都可以去指明某個“意圖”,都可以用來啓動活動,啓動服務,發送廣播等。不同的是,Intent傾向於立即執行某個動作,而PendingIntent傾向於在某個合適的時機去執行某個動作。所以也可以把PendingIntent理解爲延時執行的Intent。
PendingIntent的用法:
它主要提供了幾個靜態方法來獲得PendingIntent的實例,根據需求選擇getActivity(),getBroadcast()還是getService().
這幾個方法接收的參數是相同的:
1.Context
2.第二個參數通常用不到,傳入0即可
3.Intent對象,通過這個對象構建出PendingIntent的意圖。
4.確定PendingIntent的行爲,有以下幾種值:
FLAG_ONE_SHOT;FLAG_NO_CREATE;FLAG_CANCEL_CURRENT;FLAG_UPDATE_CURRENT
完整用法:
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.abc_btn_default_mtrl_shape, "this is ticker text",
System.currentTimeMillis());
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
notification.setLatestEventInfo(this, "title", "text", pi);
notificationManager.notify(1, notification);