一。概念
通知(Notification)是 Android 系統中比較有特色的一個功能,當某個應用程序希望像用戶發送一些提示消息的時候,然而此時應用程序並不在前台運行,此時就可以借助通知來實現。發出一條通知后,手機的最上方的狀態欄會顯示一個通知的圖標,下拉狀態欄之后可以看到通知的詳細信息。
二。創建通知的步驟
1. 首先需要一個 NotificationManager 來對通知你進行管理。
可以調用 Context 的getSystemService() 方法來得到 NotificationManager 對象。 getSystemService()方法接收一個參數就可以確定獲取系統的哪個服務。在這里我們傳入Context.NOTIFICATION_SERVICE 即可。
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
2. 接下來需要創建一個 Notification 對象,這個對象用於存儲通知所需的各種信息,我們可以使用它的有三個參數的構造函數來進行創建。
Notification() Constructs a Notification object with default values.
Notification(int icon, CharSequence tickerText, long when) This constructor was deprecated in API level 11. Use Notification.Builder
instead.
Notification(Parcel parcel) Unflatten the notification from a parcel.
我們可以使用Notification的有有三個參數的造函數。
第一個參數用於指定通知的圖標,比如項目的 res/drawable 目錄下有一張 icon.png 圖片,那么這里我們傳入 R.drawable.icon。
第二個參數用於指定通知的 ticker 內容,當通知剛被創建是,他會在系統狀態欄一閃而過,屬於一種瞬時提示消息。
第三個參數用於指定通知被創建的時間,當下拉狀態欄時,這里指定的時間會顯示在通知上。
所以,我們創建一個 Notification 對象就可以寫成:
Notification notification = new Notification(R.drawable.icon, "This is ticker text", System.currentTimeMellis());
3. 創建好了 Notification 對象之后我們還需要對通知的布局進行設定。
我們只需要調用 setLatestEventInfo() 方法就可以給通知設置一個標准的布局。
public void setLatestEventInfo(Context context, CharSequence contentTitle, CharSequence contentText, PendingIntent contentIntent)
這個方法接收四個參數:
第一個是 Context;第二個用於指定標題內容下拉狀態欄是,就是現實這個內容第三個用於指定正文內容,同樣是下拉狀態欄的時候可以看到,第四個參數 我們先傳入null,后面再說,這個參數是用於指定,點擊這個通知的時候的響應;
notification.setLatestEventInfo(context, "This is content title", "This is content", null);
4. 最后我們只需要 NotificationManager 的 notify() 方法就可以讓通知顯示出來。
public void notify(int id, Notification notification)
public void notify(String tag, int id, Notification notification)
notify 方法接收兩個參數: 第一個是 id,要保證每個通知指定的 id 是唯一的; 第二個參數則是 Notification 對象,這里我們只需要把剛才創建好的 notification 對象傳入即可。
manager.notify(1, notification);
到這里我們就完成了通知的創建,通知既可以在活動中創建,還可以在廣播接收器和服務中創建。我們一般不在活動中創建,不管在哪兒創建,步驟都是一樣的。
5. 下拉狀態欄,響應點擊通知欄。
3 中的 setLatestEventInfo 的最后一個參數 PendingIntent 就是在合適的時機去執行某個動作。
可以根據你創建 通知的地方調用相應的方法得到 PendingIntent 的實例, getActivity(),getBroadcast() , getService()。
這幾個方法接收的參數是相同的,第一個是 Context,第二個一般用不到,傳入0即可,第三個參數是 Intent ,通過這個實現跳轉, 第四個參數用於確定PendingInetent 的行為。
Intent intent = new Intent(this, NotificationActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); notification.setLatestEventInfo(context, "This is content title", "This is content", pendingIntent);
6. 跳轉到對應的界面后,取消通知欄
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancel(1);