1. 程式人生 > >FC 8.2 關於通知Notification

FC 8.2 關於通知Notification

通知,既可以在活動裡建立,也可以在廣播接收器裡建立,也可以在服務裡建立。(一般只有在程式進入到後臺的時候我們才需要使用通知,所以在活動裡建立通知的場景比較少)

建立通知:

  • 需要一個NotificationManager對通知進行管理,呼叫getSystemService()獲取,這個方法接收一個字串引數用於確定獲取系統的那個服務。
  • 接下來使用一個Builder構造器來建立Notification物件。(因為Android系統每個版本都會對通知部分功能進行修改,郭神的建議是使用support-v4庫)
  • 設定title、text、通知時間、小圖示
  • 使用NotificationManager的notify()
    方法讓通知顯示出來。兩個引數,
    • 第一個引數是id,用於保證每個通知所指定的id都是不同的。
    • 第二個引數就是物件Notification
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
        .setContentTitle("我是通知title")
        .setContentText("我是通知text")
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .build();
manager.notify(1, notification);

在介面新增一個按鈕,為按鈕新增事件,即我們剛寫好的通知事件。

執行,點選按鈕,手機上會出現一個通知,然而點選通知並沒有什麼動作,通知也沒有消失,因為我們沒有設定,接下來修改程式碼來實現:

  • 點選通知跳轉頁面
  • 點選通知後通知訊息自動消失
  • 通知來時,led燈閃爍
  • 手機通知的預設效果
  • 設定通知的級別

點選通知跳轉頁面

這裡需要使用PendingIntent,使用它的getActivity方法,其中需要的引數,第一個是context,(第二個一般用不到,傳0即可)第三個是Intent物件,使用這個物件構建出pendingIntent的意圖,第四個引數用於確定pengdingIntent的行為,這裡傳入0。

Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);

...

.setContentIntent(pi)//設定點選通知的動作

點選通知後通知訊息自動消失

兩種方法:

方法一:在活動的oncreate方法裡新增程式碼:

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.cancel(1);//1是對應通知的id

方法二,直接在Notification物件裡新增程式碼:

.setAutoCancel(true)//設定點選後通知訊息消失

通知的效果及其通知級別設定:

.setLights(Color.GREEN,1000,1000)//設定通知來是手機led等閃爍
.setDefaults(NotificationCompat.DEFAULT_ALL)//設定通知的預設效果,
.setPriority(Notification.PRIORITY_MAX)

完整程式碼:

Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
        .setContentTitle("我是通知title")
        .setContentText("我是通知text")
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentIntent(pi)//設定點選通知的動作
        .setAutoCancel(true)//設定點選後通知訊息消失
        .setLights(Color.GREEN,1000,1000)//設定通知來是手機led等閃爍
        .setDefaults(NotificationCompat.DEFAULT_ALL)//設定通知的預設效果,
        .setPriority(Notification.PRIORITY_MAX)
        .build();
manager.notify(1, notification);