iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 29
1

透過Notification類別,可以在系統發出通知給使用者

NotificationChannel

從API 26開始,多了通知頻道的功能,而且必須要實作通知頻道才能發出通知

建立通知頻道需要有以下三個參數:

  • id:辨識頻道的id,同個package裡面不能有相同id的頻道,若設置太長可能會被截斷
  • name:使用者會看到的名稱,建議的最大長度是40個字元,太常可能會被截斷
  • importance:頻道通知的重要性,在APP安裝後可在設定中作變更,會影響通知的顯示方式,可用的值包含:
    • IMPORTANCE_NONE:不重要,沒有提醒效果(彈出提醒、音效和震動),也不會顯示通知

    • IMPORTANCE_MIN:重要性最低,沒有提醒效果(彈出提醒、音效和震動),不顯示在狀態欄,只顯示在展開的通知欄中

    • IMPORTANCE_LOW:重要性低,沒有提醒效果(彈出提醒、音效及震動),顯示在狀態欄和展開的通知欄中

    • IMPORTANCE_DEFAULT:預設的重要性,不會彈出提醒,但可發出音效及震動,顯示在狀態欄及展開的通知欄中。

    • IMPORTANCE_HIGH:重要性高,會彈出提醒,可以發出音效及震動,顯示在狀態欄及展開的通知欄中,可以使用全螢幕的Intent

val channel = NotificationChannel("Ch1", "Day29", NotificationManager.IMPORTANCE_HIGH)

Notification

通知的類別,用於設置通知的樣式
.Builder()建立Notification,第二個參數是通知頻道

val notification = Notification.Builder(this, "Ch1")

設置通知樣式的方法有

  • .setSmallIcon()
    設置通知的小圖示,是必須設置的項目
  • .setLargeIcon()
    設置通知的大圖示
  • .setContentTitle()
    設置通知的標題
  • .setContentText()
    設置通知的內容文字
  • .setContentIntent()
    設置使用者點擊通知時要觸發的 intent 行為
  • .setAutoCancel()
    讓通知在使用者點擊通知時自動移除
  • .setSound()
    設定通知的音效
  • .setLights()
    設定通知的閃燈

最後使用.build()建立通知

例如:設置一個標題為"通知",內文是"第29天~",且被點選後會自動消失的通知

val notification = Notification.Builder(this, "Ch1")
    .setSmallIcon(R.drawable.notification_icon_background)
    .setContentTitle("通知")
    .setContentText("第29天~")
    .setAutoCancel(true)
    .build()

NotificationManager

負責發出通知的類別
首先建立一個NotificationManager

val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager

使用.createNotificationChannel()設定通知頻道,.notify()發出通知

manager.createNotificationChannel(channel)
//第一個參數是辨識通知的ID 第二個是要使用的Notification
manager.notify(0, notification)

實作成果


上一篇
Day 28 TurnTable(MediaPlayer)
下一篇
Day 30 WebView(WebView + 隱藏標題列)
系列文
高中生Kotlin實作30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言