我們想要使用者能夠擊點 Notification 進入 Activity
val intent = Intent(this, HelloActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or (Intent.FLAG_ACTIVITY_NEW_TASK)
val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
intent 跟 pendingIntent 兩個主要的差別,pendingIntent 是將 intent 封裝更好,能夠 intent 資料到其他的 application。
關於 pending 更深入的使用請看這裡
之後我們需要建立一個 Notification
val mBuilder = NotificationCompat.Builder(this, "Lester")
.setSmallIcon(R.drawable.notification_icon_background)
.setContentTitle("Hello")
.setContentText("How are you?")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setVibrate(longArrayOf(0,1000))
.setFullScreenIntent(pendingIntent, false)
.setAutoCancel(true)
預設必要的的參數為 SmallIcon, ContentTitle, ContentText 其他的的參數都可以依自己需求加上
這裡有幾個特別說明 setVibrate 裡需要 傳入一個 longArray 參數來代表 (等待毫秒, 震動毫秒) 可以傳入更多值來自定震動狀態
setFullScreenIntnet 與 setContentIntent 都可以做到相同效果,但 setFullScreenIntent 會有 popup 效果。
setAutoCancel(true) 讓使用者按下通知後就會消失
設定好我們的 Notificaiton 後就是讓他可以出現在 Status Bar 上
with(NotificationManagerCompat.from(this)) {
notify(123, mBuilder.build())
}
這裡要特別注意 notify 第一個參數是指 notification id 如果我們有很多 notificaiton 的時候,系統就是靠這個來判斷。
Android 8.0 以上後,我們使用 Notification 都需要建立 Channel 讓使用者可以通過 設定 -> 通知 來改變個 APP 的通知狀態
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = "LesterChannel"
val descriptionText = "2018-10-17-test"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel("Lester", name, importance).apply {
description = descriptionText
}
建立一個 NotificationChannel 需要三個參數 分別是 channelid, channelname, importance
importance 跟 priority 的比較可以看這裡
這樣我們就可以創造出一個 Channel 了
今天就先這樣囉,我們明天見。